Получите новый фрейм данных с разницей в каждые две строки в Pandas - PullRequest
4 голосов
/ 07 марта 2019

У меня в Pandas есть кадр данных, подобный приведенному выше:

    A   B   C
0   1  10  43
1   2  12  34
2   1   9  57
3   2   7  47
4   1   6  30
5   2  10  31

Я хотел бы рассчитать разницу между двумя строками в соответствии со столбцом A (по сути, получить различия между всеми остальнымистолбцы, когда A = 1 - A = 2).Итак, я хотел бы придумать что-то вроде этого:

    B   C
0  -2   9
1   2   10
2  -4  -1

Я знаю о функции diff (), но, похоже, она не делает то, что я хочу.Есть ли способ?

Ответы [ 2 ]

6 голосов
/ 07 марта 2019

Вы можете взять этажное деление индекса на 2 и использовать результат как группировщик, а затем взять первые различия групп, используя DataFrame.diff():

df.groupby(df.index//2)['B','C'].diff(-1).dropna().reset_index(drop=True)

    B     C
0 -2.0   9.0
1  2.0  10.0
2 -4.0  -1.0
1 голос
/ 07 марта 2019

Вы можете индексировать A и вычитать:

x = df[df['A'] == 1].reset_index(drop=True).drop('A', axis=1)
y = df[df['A'] == 2].reset_index(drop=True).drop('A', axis=1)

x - y
...