如何转置Python DataFrame,将不同列值转为列并合并对应行数据
问题描述
现有一个包含level、match、params、value列的Python DataFrame,其中level与match为唯一组合。需要将其转换为以params的不同取值(m、p)作为列名,对应value值按level&match组合同行展示的格式。
原始数据:
level match params value 0 0 m value1 0 1 p value2 1 0 m value3 1 1 p value4
目标格式:
m p value1 value2 value3 value4
解决方案
可以用Pandas的pivot方法快速完成转换,核心是指定分组的行索引、列名来源和填充值:
import pandas as pd # 构建原始DataFrame df = pd.DataFrame({ 'level': [0, 0, 1, 1], 'match': [0, 1, 0, 1], 'params': ['m', 'p', 'm', 'p'], 'value': ['value1', 'value2', 'value3', 'value4'] }) # 执行转换:以level+match为分组依据,params作列名,value填充对应单元格 result = df.pivot(index=['level', 'match'], columns='params', values='value') # 移除索引和列名的层级标签,让输出完全匹配目标格式 result = result.reset_index(drop=True) result.columns.name = None print(result)
执行后输出:
m p 0 value1 value2 1 value3 value4
也可以用set_index加unstack的组合实现相同效果:
result = df.set_index(['level', 'match', 'params'])['value'].unstack('params') result = result.reset_index(drop=True) result.columns.name = None
内容的提问来源于stack exchange,提问作者Kamlesh
相关产品推荐
相关产品推荐

