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

如何在Python中为面板数据各组向后扩展5年时间序列

如何在Python中为每个公司分组扩展历史年份数据并填充NaN

我来帮你搞定这个需求——用Pandas就能高效实现,步骤清晰易懂,完全匹配你的预期输出。

先明确需求要点

  • 按公司唯一标识(这里用identifier最稳妥)分组
  • 为每个分组找到最早的记录年份,向前生成5个连续年份的新行
  • 新行复制firm、sic、identifier、name的内容,X、Y、Z列填充为NaN
  • 最终合并原始数据与扩展数据,并按公司+年份排序

第一步:准备示例数据

先把你提供的原始数据转换成Pandas DataFrame:

import pandas as pd
import numpy as np

# 原始数据
raw_data = [
    [1078, 2834.0, "002824100", "ABBOTT LABORATORIES", 2013, 4.347826, 5.217391, 15.739130],
    [1078, 2834.0, "002824100", "ABBOTT LABORATORIES", 2014, 4.368421, 6.263158, 16.684211],
    [112178, 2836.0, "00339B107", "ABGENIX INC", 2005, 5.222222, 3.111111, 9.777778],
    [112178, 2836.0, "00339B107", "ABGENIX INC", 2006, 5.222222, 4.111111, 10.777778],
    [178855, 2836.0, "00383Y102", "ABRAXIS BIOSCIENCE INC", 2007, 4.000000, 0.000000, 13.544322]
]

df = pd.DataFrame(raw_data, columns=["firm", "sic", "identifier", "name", "year", "X", "Y", "Z"])

第二步:实现核心扩展逻辑

通过分组遍历生成扩展数据,再合并到原始数据中:

# 存储所有分组的扩展后数据
expanded_results = []

# 按公司唯一标识分组处理
for _, group in df.groupby("identifier"):
    # 获取当前公司的最早记录年份
    earliest_year = group["year"].min()
    # 生成需要扩展的5个年份(最早年份往前推5年)
    expand_years = range(earliest_year - 5, earliest_year)
    
    # 构建扩展行的DataFrame
    expand_rows = pd.DataFrame({
        "firm": [group["firm"].iloc[0]] * 5,
        "sic": [group["sic"].iloc[0]] * 5,
        "identifier": [group["identifier"].iloc[0]] * 5,
        "name": [group["name"].iloc[0]] * 5,
        "year": list(expand_years),
        "X": [np.nan] * 5,
        "Y": [np.nan] * 5,
        "Z": [np.nan] * 5
    })
    
    # 合并扩展行与原始分组数据,加入结果列表
    expanded_group = pd.concat([expand_rows, group], ignore_index=True)
    expanded_results.append(expanded_group)

# 合并所有分组结果,按公司和年份排序
final_df = pd.concat(expanded_results, ignore_index=True).sort_values(by=["identifier", "year"], ignore_index=True)

# 查看最终结果
print(final_df)

额外:导出结果到CSV

如果需要把处理后的数据保存成文件,执行这行代码即可:

final_df.to_csv("expanded_company_data.csv", index=False)

运行后你会得到和你预期完全一致的输出——每个公司的原始数据前会多出5行历史年份的空值数据,静态列完全复制,整体按公司和年份有序排列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:13:48