我有一个pandas数据帧,我需要在属于同一组的行之间执行各种操作,例如找到它们之间的区别。例如,我有以下内容:
var1 var2
1 7
1 10
1 15
2 3
2 9
2 5
我希望得到以下内容:
var1 var2 var3
1 7 NaN
1 10 3
1 15 5
2 3 NaN
2 9 6
2 5 -4
我知道我可以遍历不同的var1组,使用shift运算符获得差异,然后追加结果。我想知道是否有更好的方法来做到这一点。谢谢你的帮助。
答案 0 :(得分:1)
您想在transform
对象上使用groupby
将新列添加回原始df:
In [58]:
df['var3'] = df.groupby('var1')['var2'].transform(lambda x: x.diff())
df
Out[58]:
var1 var2 var3
0 1 7 NaN
1 1 10 3.0
2 1 15 5.0
3 2 3 NaN
4 2 9 6.0
5 2 5 -4.0
所以这个组在'var1'然后在每个组上调用lambda来计算差异,并且使用transform
将返回一个系列,其索引与原始df对齐,因此您可以将其添加为新的柱