如何使用Pandas按每月23日至次月23日进行自定义月度聚合?
按自定义日期区间(每月23日至次月23日)汇总inventory数据
原数据构造代码
import pandas as pd tidx = pd.date_range('2022-10-01', periods=10, freq='10D') data_frame = pd.DataFrame(1, columns=['inventory'], index=tidx)
解决方案思路
resample默认按自然月边界分组,要实现自定义的“每月23日到次月23日”区间,核心是调整日期的分组基准:将每个日期减去23天,这样原区间内的日期会被归到同一个基准月,再用resample按月份汇总,最后还原索引日期即可。
实现代码
# 调整索引,将日期映射到对应的基准月(减去23天) adjusted_index = data_frame.index - pd.Timedelta(days=23) # 按基准月重采样求和 sum_result = data_frame.set_index(adjusted_index).resample('M')['inventory'].sum() # 将结果索引加回23天,得到区间的结束日期 sum_result.index = sum_result.index + pd.Timedelta(days=23) # 命名索引明确含义 sum_result.index.name = '区间结束日期' print(sum_result)
输出结果
区间结束日期 2022-10-23 3 2022-11-23 3 2022-12-23 3 2023-01-23 1 Name: inventory, dtype: int64
结果说明
- 2022-10-23对应区间:2022-09-23 ~ 2022-10-23,包含原数据中的
2022-10-01、2022-10-11、2022-10-21,总和为3 - 2022-11-23对应区间:2022-10-23 ~ 2022-11-23,包含原数据中的
2022-10-31、2022-11-10、2022-11-20,总和为3 - 以此类推,最后一个区间2022-12-23 ~ 2023-01-23仅包含
2022-12-30,总和为1
内容的提问来源于stack exchange,提问作者Phoenix
相关产品推荐
相关产品推荐

