经过一些数据操作并使用数据透视表,我能够达到所需的结果:
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
答案 0 :(得分:0)
如果您不想在数据框中附加额外的列,则需要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
答案 1 :(得分:0)
我相信您可以为此使用排序值。
df = df.sort_values(by=['domain','count'],ascending = (0,0))