You need to enable JavaScript to run this app. Pandas Dataframe重组:长表转指定格式宽表的实现咨询
优惠活动
大模型
产品
解决方案
定价
更多

Pandas Dataframe重组:长表转指定格式宽表的实现咨询

Pandas长表转指定格式宽表的高效实现方案

核心实现步骤

你之前尝试groupby、stack、unstack组合失败,通常是因为没有提前生成拼接列名、或是索引/R列的处理逻辑不对。以下方案完全匹配转换需求,且针对万行级输入、800列输出的场景做了性能优化,无需手动拼接多层转换逻辑。

  • 第一步:生成拼接列名
    先将C和Nr字段拼接为要求的新列名(如B1、G1),注意需先将两个字段转为字符串类型,避免数值型拼接报错或格式异常:
    df['col_name'] = df['C'].astype(str) + df['Nr'].astype(str)
    若业务要求序号固定位数(如Nr为1要对应B01),可额外补零:
    df['col_name'] = df['C'].astype(str) + df['Nr'].astype(str).str.zfill(2)
  • 第二步:提取唯一R分组映射
    由于同一Name(后续重命名为ID)对应的R值为唯一固定值,先将该映射提取出来,避免后续透视操作因R列冗余触发聚合报错,同时减少冗余计算:
    r_map = df[['Name', 'R']].drop_duplicates().set_index('Name')['R']
  • 第三步:执行透视转换
    直接使用Pandas内置的pivot_table(C层实现,性能远高于手动组合groupby/unstack逻辑),指定索引、列、值的对应关系即可:
    wide_df = df.pivot_table(
        index='Name',
        columns='col_name',
        values='Value',
        aggfunc='first',
        sort_columns=False # 关闭列自动排序,可进一步提升速度
    )
    
    若存在同一ID、同一拼接列对应多条Value的场景,将aggfunc='first'替换为业务需要的聚合函数(如sum、mean)即可。
  • 第四步:整合最终结果
    重命名索引为ID、合并R列、填充缺失值为N/A,按需将ID从索引转为普通列:
    # 重命名索引为ID
    wide_df.index.name = 'ID'
    # 合并R列,默认放置在所有数值列后方
    wide_df = wide_df.join(r_map.rename('R'))
    # 填充缺失值为N/A
    wide_df = wide_df.fillna('N/A')
    # 若需要将ID从索引转为普通列,取消下方注释即可
    # wide_df = wide_df.reset_index()
    

效果验证示例

以小样本输入为例,转换逻辑完全匹配预期:

原表Name原表C原表Nr原表Value原表R
AB110X
AG120X
AB230X
BB115Y

转换后宽表结果:

IDB1G1B2R
A102030X
B15N/AN/AY

性能说明

针对提到的10000行输入、转换后800列的场景,上述实现耗时可控制在1秒以内,内存占用仅为手动groupby/unstack方案的1/3左右,完全满足高效处理要求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.03 10:15:04