gpt4 book ai didi

python - 接下来 n 行的 Pandas 总和

转载 作者:太空宇宙 更新时间:2023-11-03 15:38:47 26 4
gpt4 key购买 nike

我有一个如下所示的 DataFrame:

             ds         y
0 2017-02-07 0.154941
1 2017-02-08 0.110595
2 2017-02-09 0.044022
3 2017-02-10 0.283902
4 2017-02-11 0.121570
5 2017-02-12 0.000000
6 2017-02-13 0.020265
7 2017-02-14 0.053577
8 2017-02-15 0.080842
9 2017-02-16 0.022043

我现在正在尝试创建一个新列“next_3”,它是当天之后接下来 3 天的 y 值的总和。

我正在使用:

df['next_3'] = df['y'].shift(-3).rolling(3).sum()

产生这个:

           ds         y     label
0 2017-02-07 0.154941 NaN
1 2017-02-08 0.110595 NaN
2 2017-02-09 0.044022 0.405472
3 2017-02-10 0.283902 0.141836
4 2017-02-11 0.121570 0.073842
5 2017-02-12 0.000000 0.154685
6 2017-02-13 0.020265 0.156462
7 2017-02-14 0.053577 NaN
8 2017-02-15 0.080842 NaN
9 2017-02-16 0.022043 NaN

我理解为什么最后 3 行有 NaN 值,因为接下来的 3 行不可用,但为什么前 2 行有 NaN 值,当这些值可以计算吗?

如何更正我的 shift().rolling().sum() 调用,以便也计算前两行?

最佳答案

使用参数min_periods=1:

df['next_3'] = df['y'].shift(-3).rolling(3, min_periods=1).sum()
print (df)
ds y next_3
0 2017-02-07 0.154941 0.283902
1 2017-02-08 0.110595 0.405472
2 2017-02-09 0.044022 0.405472
3 2017-02-10 0.283902 0.141835
4 2017-02-11 0.121570 0.073842
5 2017-02-12 0.000000 0.154684
6 2017-02-13 0.020265 0.156462
7 2017-02-14 0.053577 0.102885
8 2017-02-15 0.080842 0.022043
9 2017-02-16 0.022043 NaN

或者先用rolling再shifting:

df['next_3'] = df['y'].rolling(3).sum().shift(-3)
print (df)
ds y next_3
0 2017-02-07 0.154941 0.438519
1 2017-02-08 0.110595 0.449494
2 2017-02-09 0.044022 0.405472
3 2017-02-10 0.283902 0.141835
4 2017-02-11 0.121570 0.073842
5 2017-02-12 0.000000 0.154684
6 2017-02-13 0.020265 0.156462
7 2017-02-14 0.053577 NaN
8 2017-02-15 0.080842 NaN
9 2017-02-16 0.022043 NaN

关于python - 接下来 n 行的 Pandas 总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53830904/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com