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

如何为pandas DataFrame补全缺失月份以计算每月预测人口

无需新增临时列的实现方案

以下几种方法都不需要提前在原数据集上新增持久化的临时列,实现逻辑更简洁,部分方案针对同一年slope、intercept一致的特征做了性能优化:


方案1:一行代码快速实现

适合小数据集,直接通过临时赋值+列展开+去重完成补全:

df = df.assign(month=[range(1,13)]).explode('month').drop_duplicates(["Year", "month"]).reset_index(drop=True)

逻辑说明:

  • 用assign生成临时的列表格式month列,不会在原数据集上新增多余列
  • explode将列表拆分为12行,对应1-12月
  • 按年+月去重得到唯一的年月组合
  • 后续可直接运行你原有pred_pop的计算逻辑

方案2:年参数提取优化(更适合大数据集)

因为同一年的slope、intercept全局一致,先提取年维度的参数映射表再补全月份,避免重复计算:

# 提取每年的固定参数,去重减少后续计算量
year_params = df[["Year", "slope", "intercept"]].drop_duplicates()
# 给每一年补全1-12月,直接得到完整的年月参数表
df_full = year_params.assign(month=[range(1,13)]).explode("month").reset_index(drop=True)

如果需要保留原有月份的实际pop值,额外补充一步合并即可:

df_full = df_full.merge(df[["Year", "month", "pop"]], on=["Year", "month"], how="left")

方案3:用MultiIndex生成完整索引

通过笛卡尔积生成所有年月组合,再匹配参数:

import pandas as pd
# 生成所有年+12个月的完整索引
full_index = pd.MultiIndex.from_product(
    [df["Year"].unique(), range(1,13)],
    names=["Year", "month"]
)
# 匹配每年的参数得到完整表
df_full = (
    df[["Year", "slope", "intercept"]]
    .drop_duplicates()
    .set_index("Year")
    .reindex(full_index.get_level_values("Year"))
    .reset_index()
    .assign(month=full_index.get_level_values("month"))
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:45:04