python - 如何在熊猫中获取特定日期之前的数据总和
问题描述
我有一个示例数据框(日期为 YYYY-MM-DD 格式)
Region Area Hq Sales Date monthyear
R1 A1 H1 1000 2020-01-01 202001
R1 A1 H1 2000 2020-01-05 202001
R1 A1 H1 1500 2020-01-09 202001
R1 A1 H1 2000 2020-01-12 202001
R1 A1 H1 2000 2020-01-17 202001
R1 A1 H1 1300 2020-01-21 202001
R1 A1 H1 1000 2020-01-23 202001
R1 A1 H1 5000 2020-01-27 202001
从每月的第 1 天到第 9 天,应计算总销售额
从每月的第 10 天到第 18 天,应计算总销售额
每月 19 日至 24 日,应计算总销售额
从每月的第 25 天到第 28 天,应计算总销售额
所需的输出:
Region Area Hq Sales till_date month_year
R1 A1 H1 4500 9th 202001
R1 A1 H1 4000 18th 202001
R1 A1 H1 2300 24th 202001
R1 A1 H1 5000 28th 202001
如您所见,我们没有2020-01-10,但我们从 2020-01-10 到 2020-01-18th 范围。所以我们选择了第 12 和第 17 的,它们都在这个范围内。其余的也一样。
另一个例子(只有一条记录)
Region Area Hq Sales Date monthyear
H1 A1 H1 1000 2020-01-01 202001
所需的输出
Region Area Hq Sales till_date monthyear
H1 A1 H1 1000 2020-01-09 202001
结果之前,销售额是在 2020-01-01 创建的,但它在 1-9th
日期范围,till_date 是 2020-01-09。
附加说明:
Region Area Hq Sales Date monthyear
H1 A1 H1 2000 2020-01-31 202001
期望的输出:
Region Area Hq Sales till_date monthyear
H1 A1 H1 0 NaN 202001
因为 31st 不在任何范围内,所以没有 till_date
我已经尝试了很多,但对我来说没有成功。所以寻求你的帮助。
提前致谢!
解决方案
方法一:
用于.asfreq
添加所有缺失的日期并用于.isin
创建要使用的掩码groupby.sum
a = np.array([1,10,19,25])
df1 = df.set_index('Date').asfreq('D')
m = df1.index.day.isin(a).cumsum()
df_final = df1.groupby(['Region', 'Area', 'Hq', m]).Sales.sum().droplevel(-1).reset_index()
Out[69]:
Region Area Hq Sales
0 R1 A1 H1 4500.0
1 R1 A1 H1 4000.0
2 R1 A1 H1 2300.0
3 R1 A1 H1 5000.0
方法二:
另一种方法是使用pd.cut
为 groupby 创建掩码
m = pd.cut(df.Date.dt.day, bins=[1,10,19,25,31], right=False)
df_final = (df.groupby(['Region', 'Area', 'Hq', m]).agg({'Date': 'last', 'Sales': 'sum'})
.droplevel(-1)
.reset_index())
Out[85]:
Region Area Hq Date Sales
0 R1 A1 H1 2020-01-09 4500
1 R1 A1 H1 2020-01-17 4000
2 R1 A1 H1 2020-01-23 2300
3 R1 A1 H1 2020-01-27 5000
推荐阅读
- oracle-apex - 如何在摘要中包含过滤器链接 - 徽章列表插件
- mongodb - 无法从 Mongo Shell 连接到 Atlas 集群(Mongo shell 版本 4.0.10)
- azure - 如何使用 Azure APIM 公开我的 REST API?
- tensorflow - 如何在tensorflow2.0的keras模型中使用tf.train.ExponentialMovingAverage
- tfs - 在 TFS 2018 构建中显示 CFML CFLint 结果总结
- haskell - 可以用 `fold/foldl` 和 `f` 等价地定义`foldMap f` 吗?
- regex - 正则表达式或子句与我想要的不匹配
- android - Flutter - 使用 ACTION_EDIT 意图时出现 PlatformException
- r - 使用 R dplyr 整理数据框
- javascript - 调度后调用函数?(还原)