pen*_*nol 2 python dataframe pandas
我有一个名为 'values' 的 pandas 列,其中包含相应的值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]
Run Code Online (Sandbox Code Playgroud)
数据帧功能是否有一种简单的方法可以快速解决这个问题?我们想要的输出如下:
['input']
11
15
22
27
36
69
77
['output']
11
4
7
5
9
33
8
Run Code Online (Sandbox Code Playgroud)
使用pandas.Series.diff有fillna:
import pandas as pd
s = pd.Series([11,15,22,27,36,69,77])
s.diff().fillna(s)
Run Code Online (Sandbox Code Playgroud)
输出:
0 11.0
1 4.0
2 7.0
3 5.0
4 9.0
5 33.0
6 8.0
dtype: float64
Run Code Online (Sandbox Code Playgroud)
您可以使用 pythonicshift函数。看看我是怎么做到的。让我知道它是否有效。
代码在这里:
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()
Run Code Online (Sandbox Code Playgroud)
解释:
结果:
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
Run Code Online (Sandbox Code Playgroud)
您可以NaN使用删除dropna()。