将结果与分组后的上一个结果进行比较



我有一个df,如下所示:

A       B       C       D       E       F
2       a1      a2      a3      a4      100
2       a1      b2      c3      a4      100 # note
2       b1      b2      b3      b4      100
2       c1      c2      c3      c4      100
1       a1      a2      a3      a4      120
2       a1      b2      c3      a4      150 # note
1       b1      b2      b3      b4      130
1       c1      c2      c3      c4      110
0       a1      a2      a3      a4      80

我想比较F列的结果,其中列B-E基于A列匹配,如下所示:

A       B       C       D       E       F               diff
2       a1      a2      a3      a4      100             120/100
2       a1      b2      c3      a4      100 # note      150/100
2       b1      b2      b3      b4      100             130/100
2       c1      c2      c3      c4      100             110/100
1       a1      a2      a3      a4      120             80/120
1       a1      b2      c3      a4      150 # note
1       b1      b2      b3      b4      130
1       c1      c2      c3      c4      110
0       a1      a2      a3      a4      80              

由于第一行在A1的第一行中具有相同的值,所以我做120/100

我尝试过的:

df.groupby(['B',' 'C', 'D', 'E'])-这将数据分组,但我不知道如何应用计算列A的前一个值的逻辑。或者也许有一种更简单的方法来实现它

DataFrameGroupBy.shiftSeries.div:一起使用

df['d'] = df.groupby(['B', 'C', 'D', "E"])['F'].shift(-1).div(df['F'])
print (df)
A   B   C   D   E    F         d
0  2  a1  a2  a3  a4  100  1.200000
1  2  a1  b2  c3  a4  100  1.500000
2  2  b1  b2  b3  b4  100  1.300000
3  2  c1  c2  c3  c4  100  1.100000
4  1  a1  a2  a3  a4  120  0.666667
5  2  a1  b2  c3  a4  150       NaN
6  1  b1  b2  b3  b4  130       NaN
7  1  c1  c2  c3  c4  110       NaN
8  0  a1  a2  a3  a4   80       NaN

相关内容

最新更新