Может производить diff () между строками по группам, но нужно эффективно начинать следующую группу с 0 diff.В настоящее время задайте разность из последней группы.
csvin['gap']=csvin.groupby(['sym','type'])['strike'].fillna(0).diff()
input
sym, strike, тип
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
выход
sym, страйк,тип, разрыв
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
3-й ряд должен составлять 0, а не 7,5, а
первый ряд AAразрыв должен быть 0, а не разница
последняя группа 54,5.
пытался преобразовать и NumPy по-прежнему не идти
пытался вычисление различий внутри групп данных кадра пытался этот код
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'
есть идеи, почему?