Pandas使用pivot_table如何混合列值与列名创建三级MultiIndex
实现方案
不需要提前手动构造MultiIndex,两种常用实现方式如下:
方式1:先透视再堆叠(代码更简洁)
先用pivot_table生成列带双层索引的中间结果,再把D/E对应的列索引层转到行索引即可:
import pandas as pd res = df.pivot_table( index=["A", "C"], columns="B", values=["D", "E"], aggfunc="first" # 避免重复值被默认聚合,无重复可省略 ).stack(level=0).rename_axis(index={None: "col-name"})
方式2:先转长表再透视(逻辑更直观)
先通过melt把D/E列转成行维度的分类,再直接按你预想的参数调用pivot_table即可:
import pandas as pd # 先把D/E列转为长格式 df_long = df.melt( id_vars=["A", "B", "C"], value_vars=["D", "E"], var_name="col-name" ) # 直接按你的需求透视 res = pd.pivot_table( df_long, columns=["B"], values="value", index=["A","C","col-name"] )
两种方法输出结果完全一致,和你预期的格式完全匹配。如果数据中存在缺失的组合,对应位置会自动填充NaN,符合你的需求。
内容的提问来源于stack exchange,提问作者Eorlingu
相关产品推荐
相关产品推荐

