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

如何为DataFrame补全月份列缺失月份并将无数据月份值填充为0

Pandas补全缺失月份并填充0的实现方案

核心逻辑是先生成目标时段内的完整连续月份基准表,再和原数据做左连接,将无匹配数据的月份统计值填充为0。


步骤1:预处理原表日期字段

你原表已经有数字格式的year和month列,直接拼接成每月第一天的标准日期格式,方便后续计算时间范围:

import pandas as pd

# 生成标准日期列,统一取每月第一天
df['date'] = pd.to_datetime(dict(year=df['year'], month=df['month'], day=1))

步骤2:生成全时段连续月份基准表

用pd.date_range生成指定范围内按月频率的日期序列,再拆分出年、月字段,和原表字段对齐:

# 方式1:手动指定你需要的时间范围:2015年7月到2022年5月,freq='MS'代表取每月第一天
full_date = pd.date_range(start='2015-07-01', end='2022-05-01', freq='MS')

# 方式2:自动取原表的最早、最晚月份作为范围,不需要硬编码日期
# full_date = pd.date_range(start=df['date'].min(), end=df['date'].max(), freq='MS')

# 构建完整月份的基准DataFrame
full_month_df = pd.DataFrame({'date': full_date})
full_month_df['year'] = full_month_df['date'].dt.year
full_month_df['month'] = full_month_df['date'].dt.month

# 若需要还原原表格式的法语缩写yearmonth列,加这段映射即可,不需要可跳过
fr_month_map = {1:'jan',2:'fev',3:'mar',4:'avr',5:'mai',6:'jun',7:'jui',8:'aou',9:'sep',10:'oct',11:'nov',12:'dec'}
full_month_df['yearmonth'] = full_month_df['year'].astype(str) + ' ' + full_month_df['month'].map(fr_month_map)

步骤3:关联原表并填充缺失值

以完整月份表为左表做左连接,匹配原表的统计值n,匹配不到的缺失值统一填0:

# 如果原表存在同一年月多条记录的情况,先聚合再关联
# df = df.groupby(['year','month'], as_index=False)['n'].sum()

# 关联数据
result = full_month_df.merge(df[['year','month','n']], on=['year','month'], how='left')
# 缺失的n值填充为0,转成整数格式
result['n'] = result['n'].fillna(0).astype(int)
# 删掉中间用的date列即可得到最终结果
result = result.drop(columns=['date'])

注意:如果原表除了n之外还有其他需要补全的统计列,把列名加到merge的字段列表中,统一对统计列做fillna(0)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 14:09:26