pandas.DataFrame中将指定列值转换为新表头的实现问题
解决方案
你需要实现的是长表转宽表的操作,直接使用pandas内置的pivot方法即可完成需求:
final = df.pivot(index='P', columns='Y', values='v').reset_index()
各参数说明:
index='P':指定原表的P列作为输出表的行索引columns='Y':指定原表的Y列唯一值作为输出表的列名values='v':指定原表的v列的值作为单元格填充值- 末尾的
reset_index()用于将行索引P转回普通列,和你预期的输出格式完全匹配
如果要基于你之前的unstack思路调整,修改后的代码如下:
final = df.set_index(['P', 'Y'])['v'].unstack('Y').reset_index()
你之前的代码存在两个问题:
- 构建多级索引时错误使用分组计数结果作为行标识,没有直接使用
P列作为行维度 - 提取数据时选择了
P列作为取值来源,自然丢失了v列的数值
完整可运行代码:
#!/usr/bin/env python3 import pandas as pd # 初始数据 df = pd.DataFrame({ 'Y': ['A', 'A', 'B', 'B', 'C', 'C'], 'P': list('XYXYXY'), 'v': range(6) }) # 实现转换 final = df.pivot(index='P', columns='Y', values='v').reset_index() # 移除列名上方的Y标识,和预期输出完全匹配 final.columns.name = None print(final)
运行输出:
P A B C 0 X 0 2 4 1 Y 1 3 5
内容的提问来源于stack exchange,提问作者buhtz
相关产品推荐
相关产品推荐

