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

如何使用pandas实现表格转换 解决pivot_table结果不符合预期的问题

Pandas 表格转换问题解决方案

问题原因

你原来的代码有两个核心问题:

  1. 传入values=['D']会生成多重列索引,最终列名会是('D', 1)这类格式,不符合单层列名的需求
  2. pivot_table默认使用均值mean作为聚合函数,而你的D列是字符串类型,无法计算均值,导致取值异常

解决方案

方案1:调整pivot_table参数

import pandas as pd
df = pd.DataFrame({'A':['a','a','a','a1','a1','a1','a1','a1','a1'], 'B':['b','b','b','b1','b1','b1','b1','b1','b1'], 'C':['c','c','c','c1','c1','c1','c1','c1','c1'], 'D':['d','d1','d2','d3','d4','d5','d6','d7','d8'], 'Rank':[1,2,3,1,2,3,4,5,6]})

# 调整pivot_table参数
res = pd.pivot_table(
    df,
    values='D',
    index=['A','B','C'],
    columns='Rank',
    aggfunc='first' # 每个分组+Rank只有一个D值,直接取第一个即可
).reset_index()

# 列名转字符串匹配需求
res.columns = res.columns.astype(str)
# 补全Rank=7的列,填充空值
res['7'] = pd.NA

# 如果需要将空值显示为字符串'NaN',可取消注释下行
# res = res.fillna('NaN')

方案2:使用更适配的pivot方法

因为你的数据中每个[A,B,C] + Rank组合唯一,不需要聚合操作,直接用pivot方法更简单:

res = df.pivot(index=['A','B','C'], columns='Rank', values='D').reset_index()
res.columns = res.columns.astype(str)
res['7'] = pd.NA

运行上述代码得到的res就和你期望的输出一致。

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:57:02