Python - 计算数据透视表中总计百分比的百分比

问题描述 投票:1回答:1

我有一个数据框,我使用pd.pivot_table方法和sum聚合函数转换为数据透视表:

summary = pd.pivot_table(df, 
                         index=["Region"], 
                         columns=["Product"], 
                         values=['Price'],
                         aggfunc=[np.sum],
                         fill_value=0,
                         margins=True,
                         margins_name="Total"
                        )

我收到了这样的输出:

Sample Pivot Table

我想添加另一个数据透视表,显示每个类别在前一个数据透视表中计算的总计百分比。所有这些应该加起来100%,应该是这样的。

Pivot Table with percents of Grand Total

我尝试过在stackoverflow上找到的以下解决方法:

total = df['Price'].sum()

table = pd.pivot_table(DF, 
                       index=["Region"],
                       columns=["Product"], 
                       values=['Price'],
                       aggfunc=[np.sum, 
                                (lambda x: sum(x)/total*100)
                               ],
                       fill_value=0,
                       margins=True,
                       margins_name="Total"
                      )

这计算了百分比,但它们只相加了85%......

没有必要计算枢轴表的外部总数并且能够从第一个枢轴调用Grand Total是很棒的。但即使我必须单独计算,如上面的代码,只要它加起来100%,它仍然会很棒。

先感谢您!

python pandas pivot-table percentage totals
1个回答
0
投票

这可以很容易地完成:

    import numpy as np
    import pandas as pd

    # Create table
    table_1 = np.matrix([[100, 200, 650, 950],
                         [200, 250, 350, 800],
                         [400, 500, 200, 200],
                         [700, 950, 1200, 2850]])

    column_labels = ['A', 'B', 'C', 'Region Total']
    idx_labels = ['Region 1', 'Region 2', 'Region 3', 'Product Total']

    df = pd.DataFrame(table_1)
    df.columns = column_labels
    df.index = idx_labels
    df.index.name = 'Sales'

    # Create percentage table
    df_percentage = np.round(df*100/df.iloc[-1, -1], 1)

    print(df_percentage)

                      A     B     C  Region Total
    Sales                                        
    Region 1        3.5   7.0  22.8          33.3
    Region 2        7.0   8.8  12.3          28.1
    Region 3       14.0  17.5   7.0           7.0
    Product Total  24.6  33.3  42.1         100.0
© www.soinside.com 2019 - 2024. All rights reserved.