将值显示为熊猫数据透视表中占列总数的百分比

时间:2019-04-04 12:06:24

标签: python pandas pivot

我正在按照以下方式在熊猫中进行价值观的转变-

ddp=pd.pivot_table(df, values = 'Loan.ID', index=['DPD2'], columns = 'PaymentPeriod',aggfunc='count').reset_index()

但是我没有获取Loan.ID的计数,而是希望Loan.ID的计数除以每一列的列总数。 例如,而不是获取如下所示的值(我没有如图所示的总计行)-

enter image description here

我想要以下百分比。

enter image description here

如何在熊猫中做到这一点?

2 个答案:

答案 0 :(得分:1)

如果值不是数字,则首先将其强制转换为浮点数或将不可解析的值转换为NaN

ddp = ddp.astype(float)
#alternative 
#ddp = ddp.apply(pd.to_numeric, errors='coerce')

然后在sum的最后一行中使用Grand Total

ddp = pd.DataFrame({'2017-06': [186, 104, 2], '2017-07': [294,98,10]})
ddp.loc['Grand Total'] = ddp.sum()
print (ddp)
             2017-06  2017-07
0                186      294
1                104       98
2                  2       10
Grand Total      292      402

将所有数据除以最后一行除以DataFrame.div,再除以100并加上百分比:

df = ddp.div(ddp.iloc[-1]).mul(100).round(2).astype(str) + '%'
print(df)
            2017-06 2017-07
0             63.7%  73.13%
1            35.62%  24.38%
2             0.68%   2.49%
Grand Total  100.0%  100.0%

如果需要,其中的浮点数为双00

df = ddp.div(ddp.iloc[-1]).mul(100).round(2).applymap("{:10.02f}%".format)
print(df)
                 2017-06      2017-07
0                 63.70%       73.13%
1                 35.62%       24.38%
2                  0.68%        2.49%
Grand Total      100.00%      100.00%

答案 1 :(得分:0)

您还可以尝试以下代码,以style.format更改列特定的格式:

df =df.style.format({'Column1':'{:,.0%}'.format,'Column2':'{:,.1%}'.format,})

您需要在上面的代码中包含特定的列名称,而不是“列”标签。

让我知道此代码是否对您有用。