Учитывая мультииндексный фрейм данных Pandas, df2, я хочу вычислить разницу в каждой строке из строки выше в каждой категории.Как вычесть строки в группах данных?
import pandas as pd
inner = ('a','b','c')
cols = ('A','B','C','D')
df1=pd.DataFrame(np.random.randn(3,4), index=inner, columns=cols)
df2=pd.concat([df1,df1],keys=['X','Y'])
df2:
A B C D
X a -0.391804 -0.307916 -0.265643 -0.222193
b -0.142498 -1.389972 1.060328 1.207945
c 1.156881 1.596382 0.620923 0.592739
Y a -0.391804 -0.307916 -0.265643 -0.222193
b -0.142498 -1.389972 1.060328 1.207945
c 1.156881 1.596382 0.620923 0.592739
Вот что я пробовал:
df2.groupby(level=[0]).apply(lambda x: df2.loc[x.index[:-1]-df2.loc[x.index[1:]]])
Но это будет получить неверный результат dataframe с тремя-Листики индексов.
A B C D
X X a -0.391804 -0.307916 -0.265643 -0.222193
b -0.142498 -1.389972 1.060328 1.207945
Y Y a -0.391804 -0.307916 -0.265643 -0.222193
b -0.142498 -1.389972 1.060328 1.207945
если вы 'groupby' на всех уровнях вашего индекса, каждая группа будет иметь только 1 строку в нем, так что ваши результаты всех' NaNs' делает смысл. –
это поможет понять, что вы пытаетесь выполнить, если вы разместили ожидаемый результат –