可以通过groupby在行之间产生diff(),但需要 有效地从0 diff开始下一组。 当前给出与上一组的最后一个的差异。
csvin['gap']=csvin.groupby(['sym','type'])['strike'].fillna(0).diff()
输入
符号,罢工,类型
A,80.00,C
A,82.50,C
A,75.00,P
A,77.50,P
A,80.00,P
AA,25.50,C
AA,26.50,C
输出
符号,罢工,类型,间隙
A,80.0,C,0
A,82.5,C,2.5
A,75.0,P,7.5
A,77.5,P,2.5
A,80.0,P,2.5
AA,25.5,C,54.5
AA,26.5,C,1.0
第三行间隔必须为0,而不是7.5,并且
AA间隙的第一行需要为0,而不是
的差异
最后一组54.5。
尝试过transform和numpy仍然行不通
试过了
Computing diffs within groups of a dataframe
尝试过此代码
csvin.set_index(['key','type']).sort_index()[['strike']]
csvin['gap']=np.nan
idx=pd.IndexSlice
for ix in csvin.index.level[0]:
csvin.loc[idx[ix,:], 'gap'] = csvin.loc[idx[ix,:],'strike'].diff()
获取错误
AttributeError:“ RangeIndex”对象没有属性“ level”
知道为什么吗?