我有一个pandas数据帧:
id won lost match
v1 1 0 1
v1 2 1 3
v1 0 5 8
v2 3 1 7
v2 5 5 12
我想分组id并汇总其他列,比如我得到一个df
id total_won total_lost total_match
v1 3 6 12
v2 8 6 19
我如何使用pandas groupby和sum操作来对多个列进行求和。 我试过用这个:
pd.groupby('id')['won'].sum()
pd.groupby('id')['lost'].sum()
pd.groupby('id')['match'].sum()
有没有更好的方法呢?
答案 0 :(得分:4)
使用groupby
而不定义列 - 将所有numeric columns汇总为总和,然后add_prefix
和最后reset_index
:
df1 = df.groupby('id').sum().add_prefix('total_').reset_index()
print (df1)
id total_won total_lost total_match
0 v1 3 6 12
1 v2 8 6 19
如果需要指定多列,请添加list
列:
cols = ['won','lost']
df1 = df.groupby('id')[cols].sum().add_prefix('total_').reset_index()
print (df1)
id total_won total_lost
0 v1 3 6
1 v2 8 6