pandas 在 Dataframe 中创建新列,使其等于差分系列

nx7onnlm  于 2022-12-02  发布在  其他
关注(0)|答案(2)|浏览(153)

我想创建一个新列diff,用于区分另一列中的系列。
以下是我的 Dataframe :

df=pd.DataFrame({
    'series_1' : [10.1, 15.3, 16, 12, 14.5, 11.8, 2.3, 7.7,5,10],
    'series_2' : [9.6,10.4, 11.2, 3.3, 6, 4, 1.94, 15.44, 6.17, 8.16]
})

它具有以下显示:

series_1    series_2
0   10.1    9.60
1   15.3    10.40
2   16.0    11.20
3   12.0    3.30
4   14.5    6.00
5   11.8    4.00
6   2.3     1.94
7   7.7     15.44
8   5.0     6.17
9   10.0    8.16
    • 目的**

则会得到以下输出:

series_1    series_2    diff_2
0   10.1    9.60        NaN
1   15.3    10.40       0.80
2   16.0    11.20       0.80
3   12.0    3.30        -7.90
4   14.5    6.00        2.70
5   11.8    4.00        -2.00
6   2.3     1.94        -2.06
7   7.7     15.44       13.50
8   5.0     6.17        -9.27
9   10.0    8.16        1.99
    • 我的代码**

为了达到所需的输出,我使用了以下代码,它工作了:

diff_2=[np.nan]

l=len(df)

for i in range(1, l):
    
    diff_2.append(df['series_2'][i] - df['series_2'][i-1])

df['diff_2'] = diff_2
    • 我的代码有问题**

我在这里复制了一个简化的 Dataframe ,我正在处理的真正的 Dataframe 非常大,我的代码几乎花了9分钟的运行时间!
我希望有一种替代方法,允许我以快速的方式获得输出,
如果您有任何建议,我们将不胜感激,谢谢。

ljo96ir5

ljo96ir51#

这里有一种方法,使用diff
第一个

2vuwiymt

2vuwiymt2#

您可能需要添加以下代码行:

df["diff_2"] = df["series_2"].sub(df["series_2"].shift(1))

实现目标输出:

series_1  series_2  diff_2
0      10.1      9.60     NaN
1      15.3     10.40    0.80
2      16.0     11.20    0.80
3      12.0      3.30   -7.90
4      14.5      6.00    2.70
5      11.8      4.00   -2.00
6       2.3      1.94   -2.06
7       7.7     15.44   13.50
8       5.0      6.17   -9.27
9      10.0      8.16    1.99

这是一个内置的pandas特性,因此应该对其进行优化以获得良好的性能。

相关问题