Python - 在日期范围内创建新列(总和) - 滚动总和?
Python - Create new column (summation) in date range - Rolling Sum?
我正在尝试在我的数据框中创建一个新列:
设 X 为可变天数。
日期
售出单位
过去 X 天售出的总单位数
0
2019-01-0119:00:00
5
1
2019-01-0115:00:00
4
2
2019-01-0511:00:00
1
3
2019-01-1212:00:00
3
4
2019-01-1515:00:00
2
5
2019-02-0418:00:00
7
对于每一行,我需要总结过去 10 天售出的单位 + 所有售出的单位(设 x = 10 天)
期望的结果:
日期
售出单位
过去 X 天售出的总单位数
0
2019-01-0119:00:00
5
5
1
2019-01-0115:00:00
4
9
2
2019-01-0511:00:00
1
10
3
2019-01-1212:00:00
3
4
4
2019-01-1515:00:00
2
6
5
2019-02-0418: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
Date
Units Sold
Total Units sold in the last X days
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
我正在尝试在我的数据框中创建一个新列:
设 X 为可变天数。
日期 | 售出单位 | 过去 X 天售出的总单位数 | |
---|---|---|---|
0 | 2019-01-0119:00:00 | 5 | |
1 | 2019-01-0115:00:00 | 4 | |
2 | 2019-01-0511:00:00 | 1 | |
3 | 2019-01-1212:00:00 | 3 | |
4 | 2019-01-1515:00:00 | 2 | |
5 | 2019-02-0418:00:00 | 7 |
对于每一行,我需要总结过去 10 天售出的单位 + 所有售出的单位(设 x = 10 天)
期望的结果:
日期 | 售出单位 | 过去 X 天售出的总单位数 | |
---|---|---|---|
0 | 2019-01-0119:00:00 | 5 | 5 |
1 | 2019-01-0115:00:00 | 4 | 9 |
2 | 2019-01-0511:00:00 | 1 | 10 |
3 | 2019-01-1212:00:00 | 3 | 4 |
4 | 2019-01-1515:00:00 | 2 | 6 |
5 | 2019-02-0418: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
Date | Units Sold | Total Units sold in the last X days | |
---|---|---|---|
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 |