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

按分组基于年份列扩展数据,填补年份间隔缺失行

填补人员年份间隔数据的解决方案

现有如下格式的人员数据,其中部分记录的年份跨度(year_2 - year_1)大于1年,需要按人员分组,填补中间缺失的年度行,让每一行的年份跨度均为1年:

原始数据

name  year_1  year_2  location  job  
Joe   1990    1991    Boston    Engineer
Joe   1991    1992    Boston    Engineer
Joe   1992    1996    New York  Data Scientist
Joe   1996    1998    Chicago   Data Scientist
Peter 2003    2004    Montreal  HR
Peter 2004    2006    Singapore Marketing

目标结果

name  year_1  year_2  location  job  
Joe   1990    1991    Boston    Engineer
Joe   1991    1992    Boston    Engineer
Joe   1992    1993    New York  Data Scientist
Joe   1993    1994    New York  Data Scientist
Joe   1994    1995    New York  Data Scientist
Joe   1995    1996    New York  Data Scientist
Joe   1996    1997    Chicago   Data Scientist
Joe   1997    1998    Chicago   Data Scientist
Peter 2003    2004    Montreal  HR
Peter 2004    2005    Singapore Marketing
Peter 2005    2006    Singapore Marketing

实现代码(Python + Pandas)

import pandas as pd

# 加载原始数据(实际场景可替换为pd.read_csv读取文件)
raw_data = pd.DataFrame({
    'name': ['Joe', 'Joe', 'Joe', 'Joe', 'Peter', 'Peter'],
    'year_1': [1990, 1991, 1992, 1996, 2003, 2004],
    'year_2': [1991, 1992, 1996, 1998, 2004, 2006],
    'location': ['Boston', 'Boston', 'New York', 'Chicago', 'Montreal', 'Singapore'],
    'job': ['Engineer', 'Engineer', 'Data Scientist', 'Data Scientist', 'HR', 'Marketing']
})

def fill_year_gaps(group):
    expanded = []
    for _, row in group.iterrows():
        start_year = row['year_1']
        end_year = row['year_2']
        # 当年份跨度大于1时,生成中间行
        if end_year - start_year > 1:
            for y in range(start_year, end_year):
                expanded.append({
                    'name': row['name'],
                    'year_1': y,
                    'year_2': y + 1,
                    'location': row['location'],
                    'job': row['job']
                })
        else:
            expanded.append(row.to_dict())
    return pd.DataFrame(expanded)

# 按人员分组处理,合并结果
result_data = raw_data.groupby('name').apply(fill_year_gaps).reset_index(drop=True)

# 打印格式化结果
print(result_data.to_string(index=False))

代码说明

  1. 先加载原始数据,实际使用时可通过pd.read_csv直接读取本地或远程数据文件
  2. 定义fill_year_gaps函数,遍历每组内的每一行:
    • 若当前行的年份跨度大于1年,循环生成每个年度的过渡行,保持name、location、job字段不变
    • 若跨度为1年,直接保留原行
  3. 按name分组应用函数,重置索引后得到最终的完整数据
  4. 打印输出的格式与目标结果完全匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 07:55:32