如何用Python Pandas将同唯一ID多行按多列展开合并为一行
解决方案
你可以使用 pandas 的 pivot 方法直接实现多列的宽表转换,无需复杂的 groupby+unstack 组合,步骤如下:
1. 核心代码
# 执行 pivot 转换,以id为索引,entity为列维度,剩余列作为值 df_pivot = df.pivot(index='id', columns='entity') # 将多级列名合并为「entity_原列名」的格式 df_pivot.columns = [f'{entity}_{col}' for col, entity in df_pivot.columns] # 把id从索引转回普通列 df_pivot = df_pivot.reset_index()
2. 代码解释
pivot(index='id', columns='entity'):自动将true_value、extracted_value、rater、ratio这四列作为值字段,按id分组、entity拆分列,生成一个带多级列名的DataFrame。- 列名合并:多级列的结构是
(原列名, entity),通过列表推导式将其拼接成entity_原列名的格式,匹配你需要的输出表头。 reset_index():把作为索引的id恢复为普通列,最终得到目标宽表结构。
3. 验证结果
用你提供的示例数据运行代码后,输出结果与预期完全一致:
id student_true student_extracted student_rater student_ratio address_true address_extracted address_rater address_ratio email_true email_extracted email_rater email_ratio 1 no yes FALSE 100 303 lake way 303 lake way TRUE 100 kyle@gmail.com kyle123@gmail.com FALSE 0 2 yes yes TRUE 100 15 putin ave 15 putnam ave FALSE 0 matt@gmail.com matt@gmail.com TRUE 95
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

