熊猫将数据框的第一行与第二行相除,依此类推

时间:2020-03-14 08:33:52

标签: python pandas

我有如下数据

    aa  bb  cc
0    1   2   3
1    2   3   4
2    3   4   5
3    4   5   6
4    5   6   7
5    6   7   8
6    7   8   9
7    8   9  10
8    9  10  11
9   10  11  12
10  11  12  13
11  12  13  14
12  13  14  15
13  14  15  16
14  15  16  17
15  16  17  18
16  17  18  19
17  18  19  20
18  19  20  21
19  20  21  22

然后我想将第一行与第二行分开,是否有可能在熊猫中做到这一点?

3 个答案:

答案 0 :(得分:2)

DataFrame.divDataFrame.shift一起使用:

df = df.div(df.shift(-1))
print (df)
          aa        bb        cc
0   0.500000  0.666667  0.750000
1   0.666667  0.750000  0.800000
2   0.750000  0.800000  0.833333
3   0.800000  0.833333  0.857143
4   0.833333  0.857143  0.875000
5   0.857143  0.875000  0.888889
6   0.875000  0.888889  0.900000
7   0.888889  0.900000  0.909091
8   0.900000  0.909091  0.916667
9   0.909091  0.916667  0.923077
10  0.916667  0.923077  0.928571
11  0.923077  0.928571  0.933333
12  0.928571  0.933333  0.937500
13  0.933333  0.937500  0.941176
14  0.937500  0.941176  0.944444
15  0.941176  0.944444  0.947368
16  0.944444  0.947368  0.950000
17  0.947368  0.950000  0.952381
18  0.950000  0.952381  0.954545
19       NaN       NaN       NaN

或者:

df = df.shift().div(df)
print (df)
          aa        bb        cc
0        NaN       NaN       NaN
1   0.500000  0.666667  0.750000
2   0.666667  0.750000  0.800000
3   0.750000  0.800000  0.833333
4   0.800000  0.833333  0.857143
5   0.833333  0.857143  0.875000
6   0.857143  0.875000  0.888889
7   0.875000  0.888889  0.900000
8   0.888889  0.900000  0.909091
9   0.900000  0.909091  0.916667
10  0.909091  0.916667  0.923077
11  0.916667  0.923077  0.928571
12  0.923077  0.928571  0.933333
13  0.928571  0.933333  0.937500
14  0.933333  0.937500  0.941176
15  0.937500  0.941176  0.944444
16  0.941176  0.944444  0.947368
17  0.944444  0.947368  0.950000
18  0.947368  0.950000  0.952381
19  0.950000  0.952381  0.954545

答案 1 :(得分:1)

使用大小为2的窗口滚动并应用除法

代码

df.rolling(2).apply(lambda x: x[0]/x[1])

输出

          aa        bb        cc
0        NaN       NaN       NaN
1   0.500000  0.666667  0.750000
2   0.666667  0.750000  0.800000
3   0.750000  0.800000  0.833333
4   0.800000  0.833333  0.857143
5   0.833333  0.857143  0.875000
6   0.857143  0.875000  0.888889
7   0.875000  0.888889  0.900000
8   0.888889  0.900000  0.909091
9   0.900000  0.909091  0.916667
10  0.909091  0.916667  0.923077
11  0.916667  0.923077  0.928571
12  0.923077  0.928571  0.933333
13  0.928571  0.933333  0.937500
14  0.933333  0.937500  0.941176
15  0.937500  0.941176  0.944444
16  0.941176  0.944444  0.947368
17  0.944444  0.947368  0.950000
18  0.947368  0.950000  0.952381
19  0.950000  0.952381  0.954545

答案 2 :(得分:0)

您可以尝试-

df/df.shift(-1)