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

如何简便实现DataFrame的转置与透视组合变换?

DataFrame组合变换简便实现方案

不需要用NumPy搭配两层for循环实现,直接调用pandas内置的结构化变形方法即可,代码更简洁、运行效率也远高于手写循环,常用实现方式有两种:

  • 栈/反栈组合实现:适合索引层级复杂的变换场景
    核心是先通过set_index固定不需要变换的维度,再用stack()将宽表转为纵向长表,最后用unstack()将目标维度转到列方向完成透视,基础代码框架如下:
    # 把需要保留为行标识、不参与转置的字段传入set_index
    df_transformed = df.set_index(["行标识字段1", "行标识字段2"])\
                       .stack()\
                       .unstack(level=要转为列的维度层级)\
                       .reset_index()
    
  • 透视方法直接实现:逻辑直观,适合字段映射关系明确的场景
    只要明确指定变换后作为行索引的字段、作为列名的字段、作为单元格值的字段,一行代码即可完成转置+透视的组合操作:
    # 无重复值组合的场景用pivot即可
    df_transformed = df.pivot(
        index="保留为行的字段名",
        columns="要转为列名的字段名",
        values="填充单元格的取值字段名"
    ).reset_index()
    
    # 如果存在同维度组合下多个值需要聚合的场景,换用pivot_table指定聚合规则
    # df_transformed = df.pivot_table(
    #     index="保留为行的字段名",
    #     columns="要转为列名的字段名",
    #     values="填充单元格的取值字段名",
    #     aggfunc="sum" # 可根据需求替换为mean、count等聚合逻辑
    # ).reset_index()
    

变换后如果出现多层索引列名,想要转为普通一维列名,追加一行处理代码即可:

df_transformed.columns = [f"{col_level1}_{col_level2}" if col_level2 else col_level1 for col_level1, col_level2 in df_transformed.columns]

待处理原始DataFrame参考图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 10:15:37