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

如何实现按行遍历列的转置?pd.melt输出不符合预期需求

实现按行优先的列转行(同一ID数据归为一组)

需要将数据按「先遍历所有列的第一行,再遍历所有列的第二行」的方式转置,替代默认的「先遍历第一列所有行,再遍历第二列所有行」,最终实现列转置为行且同一ID的数据归为一类。

原始数据

columnA     columnB     columnC     columnD     columnE   ...
   IdA          a           b            c           d
   IdB          5           6            7           8
   IdC          e           f            g           h
   IdD          4           5            6           7   

当前使用代码

transpose = pd.melt(id_vars = ['columnA']
          ,var_name = ['header']
          ,value_name = 'info')

当前输出

columnA    header     info
    IdA     columnB      a
    IdB     columnB      5
    IdC     columnB      e
    IdD     columnB      4

    IdA     columnC      b
    IdB     columnC      6
    IdC     columnC      f
    IdD     columnC      5

...

预期输出

columnA    header     info
    IdA     columnB      a
    IdA     columnC      b
    IdA     columnD      c
    IdA     columnE      d

    IdB     columnB      5
    IdB     columnC      6
    IdB     columnD      7
    IdB     columnE      8

...

解决方案

默认的pd.melt会先按列名(header字段)分组输出,导致同一列的所有行先聚合。要实现预期的行优先聚合,只需在melt后对结果按columnA排序,同时保留每个ID对应的原列顺序:

transpose = pd.melt(id_vars=['columnA'], var_name='header', value_name='info')
# 按ID分组,同时保持每个ID下的列顺序与原数据一致
transpose = transpose.sort_values(['columnA', 'header'], ignore_index=True)

这样处理后,输出结果就会将同一ID的所有行聚合在一起,并且每个ID下的列顺序和原始数据中的列顺序保持一致,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 20:15:38