Через transform("sum") для знаменателя, или groupby+value_counts(normalize=True), или crosstab(..., normalize="index"); избегайте ручных циклов.
Разбор
- Проверьте нулевые суммы групп.
- Округляйте только на презентации.
- Сверяйте, что сумма долей ≈ 1 на группу.
- Margins в pivot_table для контроля.
Итог
Доли = значение / групповой итог через transform или normalize API.