1. 程式人生 > >Dataframe groupby修改內容的兩種方法

Dataframe groupby修改內容的兩種方法

第一種方法

遍歷groupby中的每一個組,將group物件(元組)的第二個元素取出來存為dataframe物件進行操作。注意,在迴圈中直接對group進行修改是不會更改groupby後的物件的。

df = pd.DataFrame({'A': 'a a b b b'.split(), 'B': [1, 2, 1, 2, 3], 'C': [4, 6, 5, 6, 7]})
print(df)
df = df.groupby(['A'])
f = lambda x: pd.Series([x.B + x.C, x.C - x.B], index=['D', 'F'])
for
group in df: print(group) df1 = group[1] # 取出第二個元素 print(df1) df1[['D', 'F']] = df1.apply(f, axis=1) print(df1)

輸出結果為

   A  B  C
0  a  1  4
1  a  2  6
2  b  1  5
3  b  2  6
4  b  3  7

('a',    A  B  C
0  a  1  4
1  a  2  6)

   A  B  C
0  a  1  4
1  a  2  6

   A  B  C  D  F
0
a 1 4 5 3 1 a 2 6 8 4 ('b', A B C 2 b 1 5 3 b 2 6 4 b 3 7) A B C 2 b 1 5 3 b 2 6 4 b 3 7 A B C D F 2 b 1 5 6 4 3 b 2 6 8 4 4 b 3 7 10 4

第二種方法

將dataframe進行groupby後轉換成字典,然後對字典進行取值,之後對dataframe物件進行操作。這種方法可以對字典進行修改。

df = pd.DataFrame(
{'A': 'a a b b b'.split(), 'B': [1, 2, 1, 2, 3], 'C': [4, 6, 5, 6, 7]}) print(df) dict_df = dict(list(df.groupby('A'))) print(dict_df) a = dict_df['a'] print("print a") print(a) a_B = dict_df['a']['B'] print("print a_B") print(a_B) f = lambda x: pd.Series([x.B + x.C, x.C - x.B], index=['D', 'F']) a[['D', 'F']] = a.apply(f, axis=1) print("print a") print(a) # 在原字典中鍵‘a’的值裡新增一列 dict_df['a'].loc[:, 'D'] = 0 print('print dict_df[''a'']') print(dict_df['a'])

輸出結果為

   A  B  C
0  a  1  4
1  a  2  6
2  b  1  5
3  b  2  6
4  b  3  7
{'a':    A  B  C
0  a  1  4
1  a  2  6, 'b':    A  B  C
2  b  1  5
3  b  2  6
4  b  3  7}
print a
   A  B  C
0  a  1  4
1  a  2  6
print a_B
0    1
1    2
Name: B, dtype: int64
print a
   A  B  C  D  F
0  a  1  4  5  3
1  a  2  6  8  4
print dict_df[a]
   A  B  C  D
0  a  1  4  0
1  a  2  6  0

對比分析一下,第二種方法需要清楚的知道分組鍵是什麼,才能進行呼叫,如果分組鍵比較多且需要對所有的分組都進行同樣的操作的話,第一種方法比較快捷。然而,如果是想直接對groupby後的內容進行修改的話,第二種方法比較好。