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

Python pandas如何实现DataFrame列转行转换为目标格式

pandas DataFrame格式转换实现方法

问题场景

使用Python完成数据清洗与分析工作后得到初始DataFrame,需要通过pandas将其转换为指定的目标聚合展示格式。

核心实现思路

这类长表转宽表、附带聚合统计的需求是pandas数据处理的高频场景,优先使用pivot_table接口实现,前期只需要先梳理清楚3类核心字段:

  • 作为行标识的维度字段:对应目标格式里固定在最左侧的行分类列
  • 需要转成列头的维度字段:对应目标格式里展开为横向列头的分类字段
  • 需要统计计算的指标字段:对应目标格式里填充在单元格中的数值类字段

可直接复用的代码

import pandas as pd

# 核心转换逻辑,替换对应参数即可适配你的数据
target_df = pd.pivot_table(
    raw_df, # 替换为你自己的原始DataFrame变量名
    index="行维度列名", 
    columns="转列维度列名",
    values="指标列名",
    aggfunc="sum", # 聚合规则可按需替换:sum求和/mean求均值/count计数/自定义函数
    fill_value=0 # 无匹配数据的空位置统一填充为0,可按需修改
).reset_index() # 将行索引还原为普通数据列,方便后续导出、处理

# 如果转换后生成多层级列名,执行以下代码拍平为单层列名
target_df.columns = [col if not isinstance(col, tuple) else "_".join(map(str, col)) for col in target_df.columns]

注意:传入的所有列名必须和原始DataFrame的实际字段名完全一致,否则会触发KeyError报错

其他场景适配

  • 如果你的数据里每个行列组合唯一对应一个值、不需要做聚合计算,可以用更轻量的df.pivot()接口,参数规则和pivot_table基本一致
  • 如果需要在结果中追加行、列合计值,给pivot_table传入参数margins=True, margins_name="合计"即可
  • 如果需要做反向转换(宽表转长表),使用pd.melt()接口即可实现

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 07:51:25