【问题标题】:Anyway to reorder pivot table columns in Python?无论如何要在 Python 中重新排序数据透视表列?
【发布时间】:2022-01-13 00:41:22
【问题描述】:

假设我有一个这样的数据透视表:

import pandas as pd

d = {'Col_A': [1,2,3,3,3,4,9,9,10,11], 
     'Col_B': ['A','K','E','E','H','A','J','A','L','A'],
     'Value1':[648,654,234,873,248,45,67,94,180,120],
     'Value2':[180,120,35,654,789,34,567,21,235,83]
    }

df = pd.DataFrame(data=d)
df_pvt = pd.pivot_table(df,values=['Value1','Value2'], index='Col_A', columns='Col_B', aggfunc=np.sum).fillna(0)
df_pvt

我想要实现的是为 Col_B(突出显示)设置一个顺序,以便 Value1 和 Value2 的输出按 E、J、A、K、L、H 的顺序显示。

【问题讨论】:

    标签: python pandas dataframe pivot-table multi-index


    【解决方案1】:

    在重塑之前将col_B 转换为分类:

    (df.astype({'Col_B' : pd.CategoricalDtype(['E', 'J', 'A', 'K', 'L', 'H'], ordered = True)})
       .pivot_table(values=['Value1','Value2'], 
                    index='Col_A', 
                    columns='Col_B', 
                    aggfunc=np.sum)
    )
          Value1                         Value2
    Col_B      E   J    A    K    L    H      E    J    A    K    L    H
    Col_A
    1          0   0  648    0    0    0      0    0  180    0    0    0
    2          0   0    0  654    0    0      0    0    0  120    0    0
    3       1107   0    0    0    0  248    689    0    0    0    0  789
    4          0   0   45    0    0    0      0    0   34    0    0    0
    9          0  67   94    0    0    0      0  567   21    0    0    0
    10         0   0    0    0  180    0      0    0    0    0  235    0
    11         0   0  120    0    0    0      0    0   83    0    0    0
    

    要对列重新排序,您可以使用相关的关键字参数重新索引:

    (df.astype({'Col_B' : pd.CategoricalDtype(['E', 'J', 'A', 'K', 'L', 'H'], ordered = True)})
       .pivot_table(values=['Value1','Value2'], 
                    index='Col_A', 
                    columns='Col_B', 
                    aggfunc=np.sum)
      .reindex(['Value2', 'Value1'], axis = 1, level = 0)
    )
    
          Value2                          Value1
    Col_B      E    J    A    K    L    H      E   J    A    K    L    H
    Col_A
    1          0    0  180    0    0    0      0   0  648    0    0    0
    2          0    0    0  120    0    0      0   0    0  654    0    0
    3        689    0    0    0    0  789   1107   0    0    0    0  248
    4          0    0   34    0    0    0      0   0   45    0    0    0
    9          0  567   21    0    0    0      0  67   94    0    0    0
    10         0    0    0    0  235    0      0   0    0    0  180    0
    11         0    0   83    0    0    0      0   0  120    0    0    0
    

    【讨论】:

    • 谢谢,如果我想在左侧显示枢轴的 Value2 部分,在右侧显示枢轴的 Value1 部分​​怎么办?
    • 添加了重新排序列的选项
    猜你喜欢
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多