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

Pandas如何按convocation分组补全年份展开DataFrame行

Pandas按分组补全连续年份行方案

需求说明

处理包含Conv(convocation)、Year两列的DataFrame,规则如下:

  • 按Conv字段分组,补全组内所有连续年份对应的行
  • 仅处理Year列存在NA缺失的分组,已有完整年份数据的分组不做改动
  • 不同Conv分组的年份区间无统一规律,需单独配置

样例数据

输入数据:

Conv   Year
1      .  # 代表NA缺失值
2      1991 
2      1992
2      1993
2      1994

期望输出:

Conv   Year
1      1985
1      1986
1      1987
2      1991 
2      1992
2      1993
2      1994

实现代码

前置说明:由于缺失年份的分组无固定区间规则,需要提前配置好对应Conv的年份起止范围,无法从全为NA的分组中自动推导区间。

import pandas as pd
import numpy as np

# 1. 初始化示例数据
df = pd.DataFrame({
    'Conv': [1, 2, 2, 2, 2],
    'Year': [np.nan, 1991, 1992, 1993, 1994]
})

# 2. 配置存在年份缺失的Conv对应的[起始年, 结束年],按实际业务值修改
conv_missing_range = {
    1: (1985, 1987)
}

# 3. 拆分出已有完整数据的部分
complete_part = df.dropna(subset=['Year'])

# 4. 生成缺失分组的连续年份行
fill_part = []
for conv, (start, end) in conv_missing_range.items():
    # 生成从起始年到结束年的所有连续年份,逐行写入
    for year in range(start, end + 1):
        fill_part.append({"Conv": conv, "Year": year})
fill_part = pd.DataFrame(fill_part)

# 5. 合并两部分数据,排序后重置索引
final_df = pd.concat([complete_part, fill_part], ignore_index=True)
final_df = final_df.sort_values(by=["Conv", "Year"]).reset_index(drop=True)

执行后final_df即为期望结果。如果缺失分组的年份区间存在其他关联表可查,直接读取关联表生成conv_missing_range字典即可,无需硬编码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 22:27:35