在 Pandas 中获取每两行差异的新数据框

Get a new dataframe with difference of every two rows in Pandas

我在 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() 函数,但它似乎无法满足我的要求。有办法吗?

您可以选择 floor division of the index by 2 and use the result as a grouper, then take the first differences of the groups using 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

您可以通过 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