如何用Pandas的pivot_table将指定表格转为目标透视表?
Pandas透视表转换问题解决指导
我是一名新手,想把包含Discipline、MR Cat、Field、Qty、Currency、Price列的原始表格,通过Pandas的pivot_table转成目标格式:行展示Discipline、MR Cat、Field、Qty,列按Currency(如USD、EUR)展开,单元格对应对应分组下的Price求和值。
我试了这段代码但没得到想要的结果:
df2=df.pivot_table(index=['Discipline','MR Cat','Field','Qty'],columns=['Currency'],values=['Price'],fill_value=0,aggfunc=sum) print(df2.reset_index())
问题出在哪
- 用了
values=['Price'],会让透视表生成多层列结构(顶层是Price,下层才是Currency),和目标格式的扁平列不符 - 重置索引后,列的轴标签(
Currency)还会保留,影响最终格式
修正后的代码
# 生成透视表,values用单个字符串而非列表,避免多层列 df2 = df.pivot_table( index=['Discipline', 'MR Cat', 'Field', 'Qty'], columns='Currency', values='Price', fill_value=0, aggfunc='sum' ) # 重置索引把层级索引转为普通列,同时移除列的轴标签 df2 = df2.reset_index().rename_axis(None, axis=1) print(df2)
代码说明
values='Price':让透视表直接以Currency作为列名,不会生成Price顶层列rename_axis(None, axis=1):去掉列上方的Currency标签,让列名完全匹配目标格式- 如果原始数据存在重复的分组组合,
aggfunc='sum'会自动对Price求和,符合需求
内容的提问来源于stack exchange,提问作者Panda
相关产品推荐
相关产品推荐

