groupby 1列和其他列的总和作为新的数据帧pandas

时间:2017-07-26 10:12:08

标签: python pandas

我有一个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()

有没有更好的方法呢?

1 个答案:

答案 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