我有一个简单的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
的总和吗?我尝试groupby
和agg
功能失败了。如果我尝试:
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
答案 0 :(得分:0)
你可以
df['sum_gov'] = df.groupby('gov')['value1'].transform(sum)
请参阅docs:
transform方法返回一个对象,该对象的索引与被分组的对象相同(大小相同)。因此,传递的转换函数应该返回与组块大小相同的结果。