получить процент сгруппированных значений на основе панелей другого столбца python - PullRequest
1 голос
/ 04 августа 2020

У меня в pandas_df два столбца. Категория и сумма. Мои данные выглядят так:

category          amount
home              20
home              10
fashion           20
fashion           10
celebrity         30
celebrity         40

Я хочу сгруппировать столбец категории и получить суммы для каждой категории. Мне также нужно знать процентное соотношение для каждой категории.

Ожидаемый результат: home 30 - 23% etc

Мой код:

dict(df.groupby(['category'])['amount'].sum().sort_values(ascending=False))

Вывод: home 30 fashion 30 celebrity 70

Ответы [ 2 ]

1 голос
/ 04 августа 2020

groupby, сложите сумму и вычислите процент от полученной суммы.

 g=df.groupby('category').agg(Sum=('amount','sum')).reset_index()#Calculate sum

g.assign(per=(g.Sum/(g.Sum.sum())*100).astype(int))#Calc the Percentage

    category  Sum  per
0  celebrity   70   53
1    fashion   30   23
2       home   30   23
1 голос
/ 04 августа 2020

Сначала я бы создал столбец «процентов»:

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

В зависимости от вашего бизнес-сценария, может оказаться полезным иметь столбец «процентов» для будущих вычислений, как тот, который вы делаете. Следовательно, включение такого столбца в ваш набор данных может быть разумным.

...