熊猫-如何对groupby()的总和进行排序

时间:2020-08-01 02:32:12

标签: pandas pandas-groupby

经过一些数据操作并使用数据透视表,我能够达到所需的结果:

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 :(得分:0)

如果您不想在数据框中附加额外的列,则需要groupby.transformargsort

# 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

Playground

答案 1 :(得分:0)

我相信您可以为此使用排序值。

df = df.sort_values(by=['domain','count'],ascending = (0,0))