You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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()

你之前的代码存在两个问题:

  1. 构建多级索引时错误使用分组计数结果作为行标识,没有直接使用P列作为行维度
  2. 提取数据时选择了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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 17:06:04