Показывать значение в% к общему столбцу в панде - PullRequest
1 голос
/ 04 апреля 2019

Я делаю свод значений в пандах следующим образом:

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

Как это сделать в pandas.?

Ответы [ 2 ]

1 голос
/ 04 апреля 2019

Если значения не являются числовыми, сначала приводятся к плавающим значениям или преобразуются в неразборчивые в NaN s:

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%
0 голосов
/ 04 апреля 2019

Вы также можете попробовать следующий код для изменения формата столбца на style.format:

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

вам нужно включить определенное имя столбца вместо метки 'Column' в приведенном выше коде.

дайте мне знать, если этот код работает для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...