【问题标题】:Python - Create new column (summation) in date range - Rolling Sum?Python - 在日期范围内创建新列(总和) - 滚动总和?
【发布时间】:2021-09-12 15:49:44
【问题描述】:

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

设 X 为可变天数。

Date Units Sold Total Units sold in the last X days
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 天)

期望的结果:

Date Units Sold Total Units sold in the last X days
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)”

请帮忙!

【问题讨论】:

  • 你关心时间还是只关心日期?
  • 我想我必须保持时间,因为有些条目是在同一天但不同的时间......但我最终会做每月滚动总和。
  • 每月滚动总和?就像每个月一起分组并获得每个月的滚动总和?或按最近 n 天分组。例如,1 月 1 日和 12 月 31 日应该属于同一组吗?您如何处理 28、29、30 或 31 天的月份?

标签: python pandas datetime sum time-series


【解决方案1】:

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

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

【讨论】:

  • 谢谢你,但我得到了错误“ValueError:错误的项目数传递 2,位置意味着 1”和“ValueError:传递值的形状是 (500, 2),索引意味着 (500 , 1)”。这是什么意思?
  • 我的代码和 DF 也明白这一点吗?如果是这样的版本... python 3.9.4,pandas 1.2.5
  • 谢谢。问题是当我重置索引时。所以我对数据进行了排序,然后做了 df.reset_index 并以某种方式改变了数据框的形状。再次感谢你:)
猜你喜欢
  • 1970-01-01
  • 2018-03-05
  • 2020-06-12
  • 1970-01-01
  • 2021-05-27
  • 2022-11-17
  • 2019-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多