Pandas透视表列顺序错乱,如何按指定数值字段分组调整?
解决Pandas透视表列顺序问题
步骤1:将MES_C设为有序类别
先定义MES_C的正确排序规则(比如按月份先后),把它转换为有序类别,确保透视时列会遵循该顺序排列:
# 替换为你的MES_C实际正确顺序,支持数字或文本格式 mes_order = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'] valores['MES_C'] = pd.Categorical(valores['MES_C'], categories=mes_order, ordered=True)
步骤2:执行透视并调整列结构
执行透视操作后,根据当前列的层级结构做对应调整:
情况1:透视结果列层级为「数值字段 → MES_C」
直接对列索引排序即可,确保每个数值字段下的MES_C按指定顺序排列:
# 二选一执行透视 pivot_df = valores.pivot(index='MARCA', columns='MES_C', values=['CMC','CMV','VL_VENDAS']) # pivot_df = pd.pivot_table(valores, values=['CMC','CMV','VL_VENDAS'], index='MARCA', columns='MES_C', aggfunc='first') # 按列层级排序 pivot_df = pivot_df.sort_index(axis=1)
情况2:透视结果列层级为「MES_C → 数值字段」
先交换列的两个层级,把数值字段移到外层,再排序:
# 二选一执行透视 pivot_df = valores.pivot(index='MARCA', columns='MES_C', values=['CMC','CMV','VL_VENDAS']) # pivot_df = pd.pivot_table(valores, values=['CMC','CMV','VL_VENDAS'], index='MARCA', columns='MES_C', aggfunc='first') # 交换列层级并排序 pivot_df = pivot_df.swaplevel(axis=1).sort_index(axis=1)
最终效果
处理后,列的展示顺序会变为:先完整显示CMC的所有MES_C列(按定义顺序),接着是CMV的所有MES_C列,最后是VL_VENDAS的所有MES_C列,完全符合需求。
内容的提问来源于stack exchange,提问作者maycondouglasmartinsrodrigues
相关产品推荐
相关产品推荐

