加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 如何反转滚动总和?

发布时间:2020-12-20 11:59:02 所属栏目:Python 来源:网络整理
导读:我在分组数据框架上计算了滚动总和,但是它加起来的方式错误,它是未来的总和,当我需要过去的总和时. 我在这做错了什么? 我导入数据并按维度和日期排序(我已尝试删除日期排序) df = pd.read_csv('Input.csv',parse_dates=True)df.sort_values(['Dimension','D
我在分组数据框架上计算了滚动总和,但是它加起来的方式错误,它是未来的总和,当我需要过去的总和时.

我在这做错了什么?

我导入数据并按维度和日期排序(我已尝试删除日期排序)

df = pd.read_csv('Input.csv',parse_dates=True)
df.sort_values(['Dimension','Date'])
print(df)

然后我创建一个新列,它是一个按滚动窗口分组的多索引

new_column = df.groupby('Dimension').Value1.apply(lambda x: 
x.rolling(window=3).sum())

然后我将索引重置为与原始索引相同

df['Sum_Value1'] = new_column.reset_index(level=0,drop=True)
print(df)

我也尝试在计算之前反转索引,但也失败了.

输入

Dimension,Date,Value1,Value2
1,4/30/2002,10,20
1,1/31/2002,10/31/2001,7/31/2001,4/30/2001,1/31/2001,10/31/2000,20
2,20
3,20

输出:

Dimension        Date  Value1  Value2  Sum_Value1
0           1   4/30/2002      10      20         NaN
1           1   1/31/2002      10      20         NaN
2           1  10/31/2001      10      20        30.0
3           1   7/31/2001      10      20        30.0
4           1   4/30/2001      10      20        30.0
5           1   1/31/2001      10      20        30.0
6           1  10/31/2000      10      20        30.0
7           2   4/30/2002      10      20         NaN
8           2   1/31/2002      10      20         NaN
9           2  10/31/2001      10      20        30.0
10          2   7/31/2001      10      20        30.0
11          2   4/30/2001      10      20        30.0
12          2   1/31/2001      10      20        30.0
13          2  10/31/2000      10      20        30.0

目标输出:

Dimension        Date  Value1  Value2  Sum_Value1
0           1   4/30/2002      10      20        30.0
1           1   1/31/2002      10      20        30.0
2           1  10/31/2001      10      20        30.0
3           1   7/31/2001      10      20        30.0
4           1   4/30/2001      10      20        30.0
5           1   1/31/2001      10      20         NaN
6           1  10/31/2000      10      20         NaN
7           2   4/30/2002      10      20        30.0
8           2   1/31/2002      10      20        30.0
9           2  10/31/2001      10      20        30.0
10          2   7/31/2001      10      20        30.0
11          2   4/30/2001      10      20        30.0
12          2   1/31/2001      10      20         Nan
13          2  10/31/2000      10      20         NaN

解决方法

您可以通过window-1移动结果以获得左对齐的结果:

df["sum_value1"] = (df.groupby('Dimension').Value1
                      .apply(lambda x: x.rolling(window=3).sum().shift(-2)))

enter image description here

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读