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

尝试pivot、transpose未成功,如何用Pandas转置单列值为多列?

Pandas 长表转宽表实现方案

你遇到的是Pandas中最常见的长表转宽表场景,之前用pivot、transpose没得到预期结果,基本都是参数错配或者混淆了方法适用场景,不需要手动循环拼接行数据,按以下步骤就能快速生成符合要求的df2:

  • 先理清三类核心字段和目标结构的对应关系:
    • 行维度字段:最终在新表中作为行唯一标识的字段,比如不需要拆分展开的Id、Date类维度
    • 列名来源字段:需要把该字段的所有取值展开成新表独立列的字段,比如存储指标名称的Parameter列
    • 数值字段:需要填充到新表对应单元格的实际值,比如存储测量值的Value列
  • 核心转换代码,注意不要混用transpose:
    df2 = df1.pivot(
        index=["Id", "Date"],  # 填入所有作为行维度的字段列表
        columns="Parameter",   # 填入需要展开成独立列名的字段
        values="Value"         # 填入对应单元格的填充值字段
    ).reset_index() 
    # 这步不能省:把pivot生成的多层行索引还原成普通列,避免出现嵌套的索引层级
    
  • 常见踩坑点:
    • 如果调用pivot时报索引重复错误,说明同一组行维度+列维度的组合存在多个数值,这时候换成pivot_table并指定聚合规则(比如取均值、求和、取最大值)即可解决,纯pivot本身就不支持重复键的场景
    • transpose是用来整体互换行和列的矩阵转置操作,和“把某字段取值展开成列”的需求完全不匹配,混用自然得不到想要的结果
  • 结果校验:
    执行完上述代码后,生成的df2会自动匹配目标结构:所有行维度字段成为普通列,原待展开字段的每个取值生成独立的数值列,没有对应数值的位置自动填充为NaN。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 21:36:08