You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对Pandas DataFrame仅按完整月份重采样求和

过滤非完整月份的月度求和结果

你的需求是:对日度DataFrame按月份求和,但只保留完整月份的数据——也就是排除起始日不是当月1号的第一个月,以及结束日不是当月最后一天的最后一个月。

现有数据示例

原日度数据(已补全日度插值):

gas
2022-10-18  1.81
2022-10-19  2.69
2022-10-20  3.06
2022-10-21  3.10
2022-10-22  2.28
...          ...
2024-02-03  5.68
2024-02-04  5.83
2024-02-05  5.74
2024-02-06  6.55
2024-02-07  3.17

用df.resample('MS').sum()得到的结果包含非完整月份:

2022-10-01   34.040
2022-11-01  164.825
2022-12-01  236.335
2023-01-01  226.180
2023-02-01  197.230
...             ...
2023-10-01   78.060
2023-11-01  191.590
2023-12-01  219.650
2024-01-01  252.370
2024-02-01   38.625

解决方案:通过条目数与当月天数对比过滤

核心思路就是验证每个月的日度条目数是否等于当月实际天数,只保留相等的月份。代码实现如下:

# 1. 按月份分组,同时计算月度求和值和当月条目数
monthly_stats = df.resample('MS').agg(
    gas_sum=('gas', 'sum'),
    day_count=('gas', 'count')
)

# 2. 获取每个月份的实际天数
monthly_stats['days_in_month'] = monthly_stats.index.days_in_month

# 3. 过滤出条目数等于当月天数的完整月份
full_month_sum = monthly_stats[monthly_stats['day_count'] == monthly_stats['days_in_month']]['gas_sum']

运行后得到的full_month_sum就是只包含完整月份的求和结果,会自动排除2022-10和2024-02这种非完整月份。

补充说明

因为你已经通过插值补全了中间月份的日度数据,所以中间月份的day_count肯定等于days_in_month,只会过滤掉首尾的非完整月份,完全符合需求。

内容的提问来源于stack exchange,提问作者monok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 20:51:01