Python Pandas 如何对DataFrame指定列执行透视并保留关联列数据
问题解决方法
错误原因
- 首先你编写的
pivot代码存在基础语法错误:index=["index","week]中week后缺少闭合引号,整行代码末尾缺少右括号。 - 核心报错逻辑是
pandas的pivot方法要求传入的index参数对应的列组合必须能唯一标识每一行,如果你传入的索引组合存在重复值,就会触发长度不匹配的报错。
正确实现代码
你需要的效果是保留原数据的每一行,仅将description列拆分为多列,对应位置填充同行的id值,可以用以下两种方法实现:
方法1:修复pivot语法后运行,再重置索引
# 把原行的index列和week一起作为透视的唯一索引 res = df.pivot(index=["index", "week"], columns="description", values="id").reset_index() # 清除列名的层级标记 res.columns.name = None
运行后空值会默认填充为NaN,你可以根据需要用空字符串替换,最终结构和你期望的效果完全一致。
方法2:用get_dummies快速实现
如果你不想处理pivot的索引逻辑,可以用独热编码乘以id列的方式实现,逻辑更简单不易出错:
# 生成description的独热编码,再和id列相乘得到对应填充值 dummies = pd.get_dummies(df['description']).mul(df['id'], axis=0) # 拼接保留的原列和生成的透视列 res = pd.concat([df[['index', 'week']], dummies], axis=1)
内容的提问来源于stack exchange,提问作者Benjamin Green
相关产品推荐
相关产品推荐

