如何将含重复列名的DataFrame转换为指定目标结构?
Pandas DataFrame 格式转换方案
问题场景
原始DataFrame结构:
Sp1 Sp1 Sp1 Sp2 Sp2 Sp2 Sp3 Sp3 Sp3 count 1 0 3 5 2 0 2 4 1 plot A B C A B C A B C
需要转换为:
plot Sp1 Sp2 Sp3 A 1 5 2 B 0 2 4 C 3 0 1
实现步骤
方法一:分步操作(清晰易懂)
构造原始数据
先还原你的原始DataFrame:import pandas as pd df = pd.DataFrame( data=[[1,0,3,5,2,0,2,4,1], ['A','B','C','A','B','C','A','B','C']], index=['count', 'plot'], columns=['Sp1','Sp1','Sp1','Sp2','Sp2','Sp2','Sp3','Sp3','Sp3'] )转置+分组聚合
转置后按列名分组,提取对应count和plot的值:# 转置DataFrame,把原列变成行,原行变成列 transposed_df = df.T # 按列名(原Sp1/Sp2/Sp3)分组,取每组的count和plot值 grouped = transposed_df.groupby(transposed_df.index).agg({ 'count': 'first', 'plot': 'first' }) # 调整结构,把plot设为索引,重命名列索引 result = grouped.set_index('plot') result.columns.name = None
方法二:一行简洁写法
如果追求代码简洁,可以合并步骤:
result = df.T.groupby(level=0).agg({'count': 'first', 'plot': 'first'}).set_index('plot').rename_axis(None, axis=1)
最终得到的结果:
Sp1 Sp2 Sp3 plot A 1 5 2 B 0 2 4 C 3 0 1
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

