Pandas 数据透视表百分比计算
Posted
技术标签:
【中文标题】Pandas 数据透视表百分比计算【英文标题】:Pandas pivot table Percent Calculations 【发布时间】: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% 也可以,但不需要这些)。
【问题讨论】:
【参考方案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
【讨论】:
我认为你是我的熊猫守护天使。 上帝保佑你们!以上是关于Pandas 数据透视表百分比计算的主要内容,如果未能解决你的问题,请参考以下文章