Сначала я бы создал столбец «процентов»:
df['percent'] = df['amount'] / sum(df['amount'])
Затем вы можете сгруппировать по категориям и получить желаемый результат, округленный до двух знаков после запятой:
df.groupby(['category']).sum().round(2)
Результатом будет:
amount percent
category
celebrity 70 0.54
fashion 30 0.23
home 30 0.23
В зависимости от вашего бизнес-сценария, может оказаться полезным иметь столбец «процентов» для будущих вычислений, как тот, который вы делаете. Следовательно, включение такого столбца в ваш набор данных может быть разумным.