从Pandas列中的当前行值中减去前一行的值

时间:2019-09-05 08:06:18

标签: python pandas dataframe

我有一个pandas列,名称为“ values”,其中包含相应的值10 15 36 95 99。我想从下一个值中减去每个值,以便获得以下格式:10 5 21 59 4

我尝试使用for循环来解决此问题,该循环遍历所有数据帧,但是此方法很耗时。

for i in range(1,length_colulmn):
    df['value'].iloc[i] = df['value'].iloc[i]-df['value'].iloc[i-1]

数据框是否有直接方法可以快速解决此问题? 我们期望的输出如下:

['input']                                       
11
15
22
27
36
69
77

['output']                                        
11
4
7
5
9
33
8

2 个答案:

答案 0 :(得分:2)

pandas.Series.difffillna一起使用:

import pandas as pd

s = pd.Series([11,15,22,27,36,69,77])
s.diff().fillna(s)

输出:

0    11.0
1     4.0
2     7.0
3     5.0
4     9.0
5    33.0
6     8.0
dtype: float64

答案 1 :(得分:1)

您可以使用pythonic shift函数。看看我是怎么做到的。让我知道它是否有效。

此处的代码:

import pandas as pd

df = pd.DataFrame({ 'input': [11, 15, 22, 27, 36, 69, 77]})

df['output']=df['input'] -df['input'].shift(1)

df
#df['output'].dropna()

说明:

  1. 创建数据框
  2. 创建列输出,以便下一行减去当前行
  3. 打印数据框

结果:

    input   output
0   11  NaN
1   15  4.0
2   22  7.0
3   27  5.0
4   36  9.0
5   69  33.0
6   77  8.0

您可以使用NaN删除dropna()