Pandas如何通过pivot将类型、值列转为各类型对应的新列?
你之前的pivot参数配置错误,不需要拆分的公共参数列被你放到了columns参数中,同时把原表逐行的索引设为了行维度,才会得到不符合预期的结果。
正确的实现逻辑是把需要保留的公共参数param1、params2作为透视的行维度,把需要展开为列的metric作为列维度,取值对应score即可,不需要额外聚合操作,只要你的数据中每个(param1, params2, metric)组合唯一,直接用下面的代码就能得到目标结构:
# 方法1:pivot实现 res = df.pivot( index=['param1', 'params2'], columns='metric', values='score' ).reset_index(drop=False) # 如果需要和示例一致的连续数字index列,再加下面这行 res = res.reset_index(drop=True)
也可以用set_index + unstack的组合实现相同效果:
# 方法2:set_index + unstack实现 res = df.set_index(['param1', 'params2', 'metric'])['score']\ .unstack('metric')\ .reset_index(drop=False)
最终输出的DataFrame列顺序为param1、params2、XXX、YYY、ZZZ,行索引为从0开始的连续数字,完全匹配你需要的格式。
内容的提问来源于stack exchange,提问作者Chutlhu
相关产品推荐
相关产品推荐

