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

如何用DataFrame的pivot_table实现类SQL透视并简化列名

解决pandas pivot_table生成多级列名的问题

当你用pivot_table实现类似SQL的Pivot功能后,出现多级索引列名,想要简化成name、grade1、grade2、grade3这样的单级列名,可以用以下两种方法:

方法1:用pivot替代pivot_table(推荐)

你的场景里每个name+col1的组合都是唯一的,不需要聚合操作,直接用pivot更简洁,生成的列天然是单级索引:

import pandas as pd

df = pd.DataFrame({"col1":["grade1","grade2","grade3"],"score":[70,80,90],"name":["n1","n2","n3"]})
# 直接用pivot指定索引、列、值
r = df.pivot(index="name", columns="col1", values="score").reset_index()
# 移除列名的层级标签(避免输出时显示col1作为列标题)
r.columns.name = None

print(r.columns)
print(r)

运行后输出的列名就是['name', 'grade1', 'grade2', 'grade3'],完全符合需求。

方法2:处理pivot_table的多级列名

如果必须使用pivot_table,可以通过修改列名来扁平化层级:

import pandas as pd

df = pd.DataFrame({"col1":["grade1","grade2","grade3"],"score":[70,80,90],"name":["n1","n2","n3"]})
r = pd.pivot_table(df, columns=["col1"], values=["score"], index=["name"]).reset_index()

# 重构列名:保留name列,提取score层级下的grade1/2/3作为列名
r.columns = ['name'] + r.columns.get_level_values(1).tolist()[1:]

print(r.columns)
print(r)

这段代码会把多级列索引的第二层(也就是grade1、grade2、grade3)提取出来作为列名,同时修正name列的显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 09:42:42