如何实现按行遍历列的转置?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
相关产品推荐
相关产品推荐

