Pandas - Как суммировать количество groupby () для сортировки по этой сумме - PullRequest
0 голосов
/ 01 августа 2020

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

domain  code    count
a.com       200     10
            502     5
            404     8
c.com       200     31
            502     9
            503     15
b.com       200     5
            404     2
            503     1
d.com       200     47
            404     22

Моя цель теперь состоит в том, чтобы суммировать количество для каждого домена и отсортировать домены в порядке убывания которые подсчитываются следующим образом:

domain  code    count
d.com       200     47
            404     22
c.com       200     31
            502     9
            503     15
a.com       200     10
            502     5
            404     8
b.com       200     5
            404     2
            503     1

Если я делаю d.groupby('domain').sum(), я просто получаю домены и сумму подсчета, но я не хочу представлять сумму, она нужна просто для сортировки.

Дополнительно я хотел бы добавить процент для каждого кода относительно каждого домена, например:

domain  code    count       %
d.com       200     47      68,115942029
            404     22      31,884057971
c.com       200     31      56,363636363
            502     9       16,363636363
            503     15      27,272727272
a.com       200     10      etc...
            502     5
            404     8
b.com       200     5
            404     2
            503     1

Ответы [ 2 ]

0 голосов
/ 01 августа 2020

Думаю, вы можете использовать для этого значения сортировки.

df = df.sort_values(by=['domain','count'],ascending = (0,0))
0 голосов
/ 01 августа 2020

Вам понадобится groupby.transform, а также argsort, если вы не хотите прикреплять дополнительный столбец к фрейму данных:

# calculate sum by group            
domain_sum = df['count'].groupby(df.domain).transform('sum')

# sort values in descending order
df = df.loc[(-domain_sum).argsort()]

# calculate percentage
df['%'] = df['count'] / domain_sum

print(df.reset_index(drop=True))

#   domain  code  count         %
#0   d.com   200     47  0.681159
#1   d.com   404     22  0.318841
#2   c.com   200     31  0.563636
#3   c.com   502      9  0.163636
#4   c.com   503     15  0.272727
#5   a.com   200     10  0.434783
#6   a.com   502      5  0.217391
#7   a.com   404      8  0.347826
#8   b.com   200      5  0.625000
#9   b.com   404      2  0.250000
#10  b.com   503      1  0.125000

Площадка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...