将组的总和插入新列

时间:2015-11-30 12:22:08

标签: python pandas dataframe

我有一个简单的DataFrame

gov dis value1  value2
a   a_1 8   8
a   a_2 7   18
a   a_3 3   2
a   a_4 12  12
b   b_1 4   11
b   b_2 16  9
b   b_3 17  12
b   b_4 7   9
b   b_5 15  11
b   b_6 13  16

我可以轻松地在value1中创建所有值的总和。

per_t['sum_v1'] = sum(per_t['value1'])

产:

    gov dis value1  value2  sum_v1
0   a   a_1 8   8   102
1   a   a_2 7   18  102
2   a   a_3 3   2   102
3   a   a_4 12  12  102
4   b   b_1 4   11  102
5   b   b_2 16  9   102
6   b   b_3 17  12  102
7   b   b_4 7   9   102
8   b   b_5 15  11  102
9   b   b_6 13  16  102

可以改变它来计算每个gov的总和吗?我尝试groupbyagg功能失败了。如果我尝试:

per_t['sum_gov'] = per_t.groupby('gov')['value1'].sum()

该表格如下:

gov dis value1  value2  sum_v1  sum_gov
0   a   a_1 8   8   102 NaN
1   a   a_2 7   18  102 NaN
2   a   a_3 3   2   102 NaN
3   a   a_4 12  12  102 NaN
4   b   b_1 4   11  102 NaN
5   b   b_2 16  9   102 NaN
6   b   b_3 17  12  102 NaN
7   b   b_4 7   9   102 NaN
8   b   b_5 15  11  102 NaN
9   b   b_6 13  16  102 NaN

1 个答案:

答案 0 :(得分:0)

你可以

df['sum_gov'] = df.groupby('gov')['value1'].transform(sum)

请参阅docs

  

transform方法返回一个对象,该对象的索引与被分组的对象相同(大小相同)。因此,传递的转换函数应该返回与组块大小相同的结果。