【问题标题】:Format Pandas Pivot Table格式化 Pandas 数据透视表
【发布时间】:2015-07-11 00:10:07
【问题描述】:

我在格式化由 Pandas 创建的数据透视表时遇到了问题。 因此,我在源数据的两列(A,B)之间制作了一个矩阵表,方法是使用 pandas.pivot_table,A 作为列,B 作为索引。

>> df = PD.read_excel("data.xls")
>> table = PD.pivot_table(df,index=["B"],
    values='Count',columns=["A"],aggfunc=[NUM.sum],
    fill_value=0,margins=True,dropna= True)
>> table 

它返回为:

      sum
  A     1  2  3  All
  B 
  1     23 52  0  75
  2     16 35 12  65
  3     56  0  0  56
All     95 87 12 196

我希望有这样的格式:

                A      All_B
            1   2   3   
    1      23  52   0     75
B   2      16  35  12     65
    3      56   0   0     56
All_A      95  87  12    196

我应该怎么做?非常感谢。

【问题讨论】:

    标签: python pandas dataframe pivot-table


    【解决方案1】:

    pd.pivot_table 返回的表非常便于处理(它是单级索引/列),通常不需要任何进一步的格式操作。但是如果您坚持将格式更改为您在帖子中提到的格式,那么您需要使用pd.MultiIndex构造一个多级索引/列。这是一个如何做的例子。

    在操作之前,

    import pandas as pd
    import numpy as np
    
    np.random.seed(0)
    a = np.random.randint(1, 4, 100)
    b = np.random.randint(1, 4, 100)
    df = pd.DataFrame(dict(A=a,B=b,Val=np.random.randint(1,100,100)))
    table = pd.pivot_table(df, index='A', columns='B', values='Val', aggfunc=sum, fill_value=0, margins=True)
    print(table)
    
    
    B       1     2     3   All
    A                          
    1     454   649   770  1873
    2     628   576   467  1671
    3     376   247   481  1104
    All  1458  1472  1718  4648    
    

    之后:

    multi_level_column = pd.MultiIndex.from_arrays([['A', 'A', 'A', 'All_B'], [1,2,3,'']])
    multi_level_index = pd.MultiIndex.from_arrays([['B', 'B', 'B', 'All_A'], [1,2,3,'']])
    table.index = multi_level_index
    table.columns = multi_level_column
    print(table)
    
                A             All_B
                1     2     3      
    B     1   454   649   770  1873
          2   628   576   467  1671
          3   376   247   481  1104
    All_A    1458  1472  1718  4648    
    

    【讨论】:

    • 谢谢。很有帮助。
    猜你喜欢
    • 1970-01-01
    • 2022-07-04
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2017-04-27
    相关资源
    最近更新 更多