所以我知道如何基于连续列之间的差异创建新列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']
但我有超过一百万个团体,所以需要一段时间,有没有更好的方法来做这个?
答案 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