首页 > 解决方案 > Python - 在日期范围内创建新列(总和) - 滚动总和?

问题描述

我正在尝试在我的数据框中创建一个新列:

设 X 为可变天数。

日期 售出单位 过去 X 天内售出的总单位数
0 2019-01-01 19:00:00 5
1 2019-01-01 15:00:00 4
2 2019-01-05 11:00:00 1
3 2019-01-12 12:00:00 3
4 2019-01-15 15:00:00 2
5 2019-02-04 18:00:00 7

对于每一行,我需要总结售出的单位 + 过去 10 天内售出的所有单位(让 x = 10 天)

期望的结果:

日期 售出单位 过去 X 天内售出的总单位数
0 2019-01-01 19:00:00 5 5
1 2019-01-01 15:00:00 4 9
2 2019-01-05 11:00:00 1 10
3 2019-01-12 12:00:00 3 4
4 2019-01-15 15:00:00 2 6
5 2019-02-04 18:00:00 7 7

.rolling(window=)在使用句号之前使用过该方法,我认为以下内容可以提供帮助

df = df.rolling(window='10D', on='date').sum() 但我无法正确使用语法!

我试过 df["Total Units sold in the last 10 days"] = df.rolling(on="date", window="10D", closed="both").sum()["Units Sold"]但得到错误

“ValueError:传递的项目数错误 2,位置暗示 1”“ValueError:传递值的形状为 (500, 2),索引暗示 (500, 1)”

请帮忙!

标签: pythonpandasdatetimesumtime-series

解决方案


根据您的样本数据,您需要指定参数

df = pd.DataFrame({'Date': [pd.Timestamp('2019-01-01 15:00:00'),
  pd.Timestamp('2019-01-01 19:00:00'),
  pd.Timestamp('2019-01-05 11:00:00'),
  pd.Timestamp('2019-01-12 12:00:00'),
  pd.Timestamp('2019-01-15 15:00:00'),
  pd.Timestamp('2019-02-04 18:00:00')],
 'Units Sold': [4, 5, 1, 3, 2, 7],
 'Total Units sold in the last X days': [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan]})
df = df.sort_values("Date")
df["Total Units sold in the last X days"] = df.rolling("10D", on="Date").sum()["Units Sold"]
df

日期 售出单位 过去 X 天内售出的总单位数
0 2019-01-01 15:00:00 4 4
1 2019-01-01 19:00:00 5 9
2 2019-01-05 11:00:00 1 10
3 2019-01-12 12:00:00 3 4
4 2019-01-15 15:00:00 2 5
5 2019-02-04 18:00:00 7 7

推荐阅读