在一组pandas数据帧

时间:2016-08-25 12:34:24

标签: python pandas

我有一个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运算符获得差异,然后追加结果。我想知道是否有更好的方法来做到这一点。谢谢你的帮助。

1 个答案:

答案 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对齐,因此您可以将其添加为新的柱