如何将pandas DataFrame单元格值转为新列,取值为另一列对应数据?
pandas 长表转宽表实现方案
你要实现的是典型的长表转宽表操作,直接用pandas内置的pivot/pivot_table方法即可,比你用get_dummies的实现逻辑更简洁、性能也更好:
适用场景说明
- 当每个
Product + Test组合仅对应唯一Score值时,用pivot方法 - 当存在同一个产品同一个测试项有多条测试数据的情况,用
pivot_table指定聚合规则即可
代码示例
1. 无重复测试数据场景
import pandas as pd # 原始df为你提到的输入数据结构 res = df.pivot( index="Product", columns="Test", values="Score" ).reset_index().rename_axis(columns=None) # 输出结果会自动把Test列的所有唯一值(包括你提到的Test_C、Test_D)转为新列,对应值为Score列的数值 # 缺失的测试项默认填充NaN,如果需要适配机器学习场景填0,可追加.fillna(0)
2. 含重复测试数据场景
res = df.pivot_table( index="Product", columns="Test", values="Score", aggfunc="mean", # 重复值聚合规则,可根据需求替换为sum、max、min等 fill_value=0 # 无对应测试项的产品直接填充0,无需后续单独处理空值 ).reset_index().rename_axis(columns=None)
对比get_dummies的优势
不需要手动做哑变量和Score列的数值映射、不需要额外做列合并,一步完成转换,自动适配所有Test列的唯一值,即使后续新增测试项也不需要修改代码逻辑。
内容的提问来源于stack exchange,提问作者Allan Bond
相关产品推荐
相关产品推荐

