我正在按照以下方式在熊猫中进行价值观的转变-
ddp=pd.pivot_table(df, values = 'Loan.ID', index=['DPD2'], columns = 'PaymentPeriod',aggfunc='count').reset_index()
但是我没有获取Loan.ID的计数,而是希望Loan.ID的计数除以每一列的列总数。 例如,而不是获取如下所示的值(我没有如图所示的总计行)-
我想要以下百分比。
如何在熊猫中做到这一点?
答案 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,})
您需要在上面的代码中包含特定的列名称,而不是“列”标签。
让我知道此代码是否对您有用。