所以我的数据,在熊猫中,看起来像这样:
values variables
134 1
12 2
43 1
54 3
16 2
我想创建一个新列,当values
的其余部分不等于variables
中当前行的变量时,该列是variables
的总和。例如,对于第一行,我想要将values
的所有行加到variables != 1
。结果如下:
values variables result
134 1 82
12 2 231
43 1 82
54 3 205
16 2 231
我尝试了一些像枚举这样的事情,但我似乎无法很好地处理这件事。谢谢!
答案 0 :(得分:3)
不是找到不等于当前变量的所有值的总和,而是可以等效地从总和中减去所有等于当前变量的值的总和而不使用任何过滤器:
df['result'] = df['values'].sum()
df['result'] -= df.groupby('variables')['values'].transform('sum')
如果你想要简洁,可以用一行:
df['result'] = df['values'].sum() - df.groupby('variables')['values'].transform('sum')
结果输出:
values variables result
0 134 1 82
1 12 2 231
2 43 1 82
3 54 3 205
4 16 2 231