Панд Crosstabs
с normalize
сделает это простым
Простой способ взять 2+ столбца и получить проценты для каждой строки в кадре данных pandas - это использовать функцию pandas
crosstab
с normalize = 'index'
Вот как будет выглядеть функция кросс-таблицы:
# Crosstab with "normalize = 'index'".
df_percent = pd.crosstab(data.Property_Area,data.Loan_Status,
normalize = 'index').rename_axis(None)
# Multiply all percentages by 100 for graphing.
df_percent *= 100
Это выдаст df_percent
, который будет выглядеть так:
Loan_Status N Y
Rural 50.000000 50.000000
Semiurban 66.666667 33.333333
Urban 16.666667 83.333333
Затем вы можете очень легко отобразить это в виде диаграммы:
# Plot only approvals as bar graph.
plt.bar(df_percent.index, df_percent.Y, align='center', alpha=0.5)
plt.ylabel('Loan Approval Percentage')
plt.title('Area Wise Loan Approval Percentage')
plt.show()
И получим полученный график:

Здесь вы можете увидеть код, работающий в google colab
Вот пример кадра данных, который я сгенерировал для этого ответа:
data = pd.DataFrame({'Loan_Status':['N','Y','Y','Y','Y','N','N','Y','N','Y','Y'
], 'Property_Area': ['Rural', 'Urban','Urban','Urban','Urban','Urban',
'Semiurban','Urban','Semiurban','Rural','Semiurban']})
Создает этот пример кадра данных:
Loan_Status Property_Area
0 N Rural
1 Y Urban
2 Y Urban
3 Y Urban
4 Y Urban
5 N Urban
6 N Semiurban
7 Y Urban
8 N Semiurban
9 Y Rural
10 Y Semiurban