【问题标题】:Pandas pivot table Percent CalculationsPandas 数据透视表百分比计算
【发布时间】:2016-09-06 00:53:42
【问题描述】:

给定以下数据框和数据透视表:

import pandas as pd
df=pd.DataFrame({'A':['x','y','z','x','y','z'],
                 'B':['one','one','one','two','two','two'],
                 'C':[2,18,2,8,2,18]})
df

    A   B       C
0   x   one     2
1   y   one     18
2   z   one     2
3   x   two     8
4   y   two     2
5   z   two     18

table = pd.pivot_table(df, index=['A', 'B'],aggfunc=np.sum)

            C
A   B   
x   one     2
    two     8
y   one     18
    two     2
z   one     2
    two     18

我想在此数据透视表中添加 2 列;一个显示所有值的百分比,另一个显示 A 列中的百分比,如下所示:

           C    % of Total  % of B
A   B
x   one    2    4%          10%
    two   18    36%         90%
y   one    2    4%          20%
    two    8    16%         80%
z   one    2    4%          10%
    two   18    36%         90%

额外积分:

我想要一个底部汇总行,其中包含 C 列的总和(如果接下来的 2 列也有 100% 也可以,但不需要这些)。

【问题讨论】:

    标签: python-3.x pandas pivot-table percentage


    【解决方案1】:

    你可以使用:

    table['% of Total'] = (table.C / table.C.sum() * 100).astype(str) + '%'
    table['% of B'] = (table.C / table.groupby(level=0).C.transform(sum) * 100).astype(str) + '%'
    print table
            C % of Total % of B
    A B                        
    x one   2       4.0%  20.0%
      two   8      16.0%  80.0%
    y one  18      36.0%  90.0%
      two   2       4.0%  10.0%
    z one   2       4.0%  10.0%
      two  18      36.0%  90.0%
    

    但是对于真实数据,我认为不推荐使用int,最好使用round

    额外积分:

    table['% of Total'] = (table.C / table.C.sum() * 100)
    table['% of B'] = (table.C / table.groupby(level=0).C.transform(sum) * 100)
    table.loc['total', :] = table.sum().values
    print table
                  C  % of Total  % of B
    A     B                            
    x     one   2.0         4.0    20.0
          two   8.0        16.0    80.0
    y     one  18.0        36.0    90.0
          two   2.0         4.0    10.0
    z     one   2.0         4.0    10.0
          two  18.0        36.0    90.0
    total      50.0       100.0   300.0
    

    【讨论】:

    • 我认为你是我的熊猫守护天使。
    • 上帝保佑你们!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-09
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-13
    相关资源
    最近更新 更多