python - 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)”
请帮忙!
解决方案
根据您的样本数据,您需要指定参数。
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 |
推荐阅读
- java - 多次使用不同的配置进行测试
- angular5 - 在角度 5 中返回三元运算符内的模板插值
- javascript - 到空间没有在 javascript 中被转换
- javascript - Javascript:关于 elem.closest() 的逻辑
- javascript - 如何用空字符替换数字
- r - R 周期性缺失的绘图点
- c# - 如何从 wpf C# 中的 ColorCanvas 下拉控件中删除箭头
- angular - date.isValid 不是函数
- docker - docker ubuntu 容器执行 bash 问题
- fix-protocol - 在 quickfixj 中发送修复字符串而不是 quickfix.Message