如何重塑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
相关产品推荐
相关产品推荐

