кросс-таблица + div
Использование pandas.crosstab
:
res = pd.crosstab(df['Kind'], df['Status'])
res[['Pct False', 'Pct True']] = res.div(res.sum(axis=1), axis=0)
print(res)
Status False True Pct False Pct True
Kind
1 0 1 0.000000 1.000000
2 2 1 0.666667 0.333333
3 0 1 0.000000 1.000000
На мой взгляд, это наиболее естественный способ отображения ваших данных.Объединять значения с процентами в одной серии не рекомендуется.
кросс-таблица + кросс-таблица нормализовать
Кроме того, вы можете объединить пару crosstab
результатов, один нормализованный, а другой нет.
res = pd.crosstab(df['Kind'], df['Status'])\
.join(pd.crosstab(df['Kind'], df['Status'], normalize='index'), rsuffix='_pct')
print(res)
Status False True False_pct True_pct
Kind
1 0 1 0.000000 1.000000
2 2 1 0.666667 0.333333
3 0 1 0.000000 1.000000
только нормализация кросс-таблицы
Если вы ищете только проценты, вы можете просто использовать аргумент normalize
:
res = pd.crosstab(df['Kind'], df['Status'], normalize='index')
print(res)
Status False True
Kind
1 0.000000 1.000000
2 0.666667 0.333333
3 0.000000 1.000000