pandas如何将type列值转为列头并映射对应value值?
最优实现方案
直接使用Pandas内置的宽表转换函数即可,无需手动遍历赋值,执行效率远高于逐列判断赋值的方案。
方案1:pivot_table方法(最通用,适配绝大多数场景)
核心代码如下:
import pandas as pd # 转换逻辑 res = df.pivot_table( index="name", columns="type", values="value", fill_value=0 ).reset_index() # 可选操作:如果不需要保留columns的名称属性,可加一行 res.columns.name = None 清理列名属性
该方法直接调用Pandas底层优化的聚合逻辑,哪怕是百万级数据量也能快速处理,完全不需要自己循环遍历type的所有取值。
方案2:get_dummies方法(代码更简洁)
如果追求更短的代码写法,也可以用独热编码结合分组求和的方式实现:
res = pd.get_dummies(df, columns=["type"], prefix="", prefix_sep="").groupby("name", as_index=False).sum()
这个方法的原理是先把type列展开为0/1的独热编码列,和value列相乘后按name分组求和,最终输出结果完全符合需求。
内容的提问来源于stack exchange,提问作者YOYOYOYO
相关产品推荐
相关产品推荐

