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

如何重塑Pandas DataFrame 将列名中的年份信息提取为新单列

Pandas宽表重塑提取年份列实现方案

你需要的是将「列名嵌合年份」的宽表转换为年份作为单独列的长表,以下是适配动态新增年份、球员的通用实现方案:

核心逻辑

从列名末尾拆分出年份信息作为单独的索引层,再将该层转为行维度即可,全程不需要手动枚举年份或球员名称,适配后续数据扩展。

完整实现代码

import pandas as pd

# ---------- 以下是模拟你的原始数据,实际使用时替换为自己的df即可 ----------
df = pd.DataFrame({
    'player A 2012': [15, 40],
    'player B 2012': [10, 25],
    'player A 2013': [20, 60],
    'player B 2013': [35, 70]
}, index=[0, 1])
df.index.name = 'index'
# ----------------------------------------------------------------------

# 1. 从右侧拆分列名,生成「球员名+年份」的两层列索引
# rsplit(n=1)表示从末尾仅拆分1次,不受球员名中间的空格影响
df.columns = df.columns.str.rsplit(n=1, expand=True)

# 2. 将年份列索引转为行维度,整理格式即可得到目标结果
df_new = df.stack(level=1).rename_axis(['index', 'year']).reset_index()

说明

  • 该方案自动识别所有列名末尾的年份,无需手动指定2012、2013等固定年份
  • 后续新增任意球员、任意年份的列,只要列名保持[球员名] [年份]的空格分隔格式,不需要修改代码即可直接运行得到正确结果
  • 你之前尝试的pivot是长表转宽表的操作,和当前宽表转长表的需求相反,因此无法得到预期结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:27:02