首页 > 解决方案 > 如何从由另一列分组的列中获取每个唯一值的百分比?

问题描述

我有一个问题,我有一列填写了事件的年份(2007、2008、...、2019),另一列填写了事件的类型(event_A、event_B、event_C)。我想知道每年发生的事件 B 的百分比。

基本上,我有这个:

Year    Event_Type
2007    Event_A
2007    Event_A
2007    Event_B
2007    Event_B
2008    Event_B
2008    Event_B

我想实现这一点:

2007    Event_B    50%
2008    Event_B    100%

我一直在寻找这个,但我一直按与此无关的帖子进行分组。所以我还远远没有达到我想要的结果。

我得到的最接近的是:

df.groupby(['Year', 'Event_Type']).size()

标签: pythonpandasdataframegroup-bypandas-groupby

解决方案


方法一:

用于crosstab/pivot计算每年发生的次数,然后对Event_B列进行切片并将其除以 df 的总和axis=1

c = pd.crosstab(df['Year'],df['Event_Type'])
c.loc[:,'Event_B'].div(c.sum(1),axis=0).mul(100).astype(str).add('%')

方法二:

您可以使用计数。组中发生的次数Event_B除以组大小:

(df['Event_Type'].eq('Event_B').groupby(df['Year']).sum()
.div(df.groupby('Year').size(),axis=0).mul(100).astype(str).add('%'))

Year
2007     50.0%
2008    100.0%

推荐阅读