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

如何用Pandas为Period列填充缺失月份并设置X值为0?

Pandas填充Period列缺失月份的优雅方案

问题场景

现有包含Period类型月份列的DataFrame:

P   X
0  2021-02   4
1  2021-04  99
2  2021-07  41
3  2021-08  43

需要填充2021年2月至8月之间的缺失月份,对应X值设为0,得到目标结果:

P   X
0  2021-02   4
1  2021-03   0
2  2021-04  99
3  2021-05   0
4  2021-06   0
5  2021-07  41
6  2021-08  43

生成原始数据的最小可复现代码:

#!/usr/bin/env python3
import pandas as pd

df = pd.DataFrame({
    'P': [pd.Period(f'2021-0{m}', freq='M') for m in [2, 4, 7, 8]],
    'X': [4, 99, 41, 43],
})

print(df)

优雅解决方案

无需循环,用Pandas内置的时间序列处理方法即可实现,以下是两种常用方案:

方法一:使用reindex

通过生成完整的月份Period序列,重新索引填充缺失项:

# 将P列设为索引
df = df.set_index('P')
# 生成从最小到最大月份的完整序列
full_periods = pd.period_range(start=df.index.min(), end=df.index.max(), freq='M')
# 重新索引并填充缺失值为0,最后恢复原结构
df = df.reindex(full_periods, fill_value=0).reset_index().rename(columns={'index': 'P'})

print(df)

方法二:使用resample

利用重采样功能直接补全缺失月份,适合时间序列场景:

# 设置Period索引后按月份重采样,缺失值填充为0
df = df.set_index('P').resample('M').sum().fillna(0).reset_index()

print(df)

注:这里用sum()是因为原数据每个月份仅一条记录,若存在重复月份数据,可根据需求替换为first()/mean()等聚合方法。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 18:20:59