在子集

时间:2016-12-12 21:52:01

标签: python pandas

所以我知道如何基于连续列之间的差异创建新列here.但是我想对数据帧的多个子集执行此操作,即.groupby('zip')

     zip   year   val
0  48123   2013    10
1  48123   2014    11
2  48123   2015    11
3  60122   2013    13
4  60122   2014    10
5  60122   2015    10

会产生

     zip   year   val   dVal
0  48123   2013    10      1
1  48123   2014    11      0 
2  48123   2015    11    NaN
3  60122   2013    13     -3
4  60122   2014    10      1
5  60122   2015    11    NaN

现在我正在使用

循环我的数据框
for index, group in df.groupby('zip'):
    group.loc['dVal'] =  group['val'].shift(-1) - group['val']

但我有超过一百万个团体,所以需要一段时间,有没有更好的方法来做这个?

1 个答案:

答案 0 :(得分:2)

您可以使用sub进行减法并删除循环:

df['dVal'] = df.groupby('zip')['val'].shift(-1).sub(df['val'])
print (df)
     zip  year  val  dVal
0  48123  2013   10   1.0
1  48123  2014   11   0.0
2  48123  2015   11   NaN
3  60122  2013   13  -3.0
4  60122  2014   10   0.0
5  60122  2015   10   NaN