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

如何在Pandas中按月份分组统计小时级数据的空值时长?

解决方案

原代码问题分析

你的代码存在两个核心问题:

  • groupby传入多个分组键时必须放在列表中,直接用逗号分隔会被识别为其他参数,导致分组逻辑错误。
  • count()统计的是非空值的数量,和你需要的“空值小时数”需求完全相反。

针对不同需求的实现代码

需求1:统计每个日历月份(1-12)的总空值小时数(所有年份同月份汇总)

# 标记空值并按月份分组求和
gap_in_month = OG_1998_2022_gaps['rel_humidity'].isna().groupby(OG_1998_2022_gaps.index.month).sum()
# 转换为DataFrame并设置列名
gap_in_month = gap_in_month.to_frame(name='null_hours')

执行后得到的DataFrame索引为1-12的月份数字,null_hours列对应该月份的累计空值小时数。

需求2:统计每个年月(如1998-01、1998-02)的空值小时数

推荐两种实现方式:

方式一:按年份+月份分组

# 按年、月分组统计空值数
gap_in_month = OG_1998_2022_gaps['rel_humidity'].isna().groupby(
    [OG_1998_2022_gaps.index.year, OG_1998_2022_gaps.index.month]
).sum()
# 将多级索引转为"年-月"格式
gap_in_month.index = gap_in_month.index.map(lambda x: f"{x[0]}-{x[1]:02d}")
# 转换为DataFrame
gap_in_month = gap_in_month.to_frame(name='null_hours')

方式二:直接使用周期索引(更简洁)

# 将时间索引转为月份周期,再分组求和
gap_in_month = OG_1998_2022_gaps['rel_humidity'].isna().groupby(
    OG_1998_2022_gaps.index.to_period('M')
).sum().to_frame(name='null_hours')

这种方式的索引是Period类型,格式为YYYY-MM,可以直接用于时间序列分析。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 00:45:36