如何在Python中使用groupby计算计数和百分比

12

我按照分组后的结果得到以下输出

Publisher.groupby('Category')['Title'].count()
Category
Coding          5
Hacking         7
Java            1
JavaScript      5
LEGO           43
Linux           7
Networking      5
Others        123
Python          8
R               2
Ruby            4
Scripting       4 
Statistics      2
Web             3
在上面的输出中,我也想要百分比,例如第一行是5*100/219,以此类推。我正在进行以下操作
 Publisher.groupby('Category')['Title'].agg({'Count':'count','Percentage':lambda x:x/x.sum()})

但是它给了我一个错误。请帮忙。


1
请参考以下程序相关内容的翻译:相关链接:http://stackoverflow.com/questions/36609176/groupby-pandas-calculate-percentage;https://dev59.com/E2Ag5IYBdhLWcg3waKV2以及https://dev59.com/vWAg5IYBdhLWcg3wnMG3。 - EdChum
@EdChum 在我的情况下似乎不起作用。 - Neil
那你需要发布原始数据、你的代码和错误,以便我们帮助你。 - EdChum
可能是[Pandas:.groupby().size()和百分比]的重复问题(https://dev59.com/E2Ag5IYBdhLWcg3waKV2)。 - iff_or
2个回答

18

我认为你可以使用:

P = Publisher.groupby('Category')['Title'].count().reset_index()
P['Percentage'] = 100 * P['Title']  / P['Title'].sum()

示例:

Publisher = pd.DataFrame({'Category':['a','a','s'],
                   'Title':[4,5,6]})

print (Publisher)
  Category  Title
0        a      4
1        a      5
2        s      6

P = Publisher.groupby('Category')['Title'].count().reset_index()
P['Percentage'] = 100 * P['Title']  / P['Title'].sum()
print (P)
  Category  Title  Percentage
0        a      2   66.666667
1        s      1   33.333333

太好了,它确实有效。我在想我们是否可以在groupby中使用count和percentage函数进行聚合? - Neil
嗯,也许可以检查一下 Edchum 的链接,但我认为有问题,因为你返回了 Series,所以会出现错误 Exception: Must produce aggregated value。我不确定。 - jezrael
不确定为什么,但这对我不起作用。如果我执行data.groupby('contract type')['count'].count(),那么我会得到一个奇怪的小数据集,无法引用列。当我尝试添加summ['perc'] = summ['count']/summ['count'].sum()*100时,我会收到一个错误提示:“列'count'不存在”。 - GenDemo
1
@GenDemo - 因为缺失 .reset_index() ;) - jezrael

1
df = pd.DataFrame({'Category':['a','a','s'],
                   'Title':[4,5,6]})

df=df.groupby('Category')['Title'].count().rename("percentage").transform(lambda x: x/x.sum())

df.reset_index()

#output in dataframe type

    Category    percentage
0   a   0.666667
1   s   0.333333

#please let me know if it doesn't solve your current problem

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接