如何从另一列分组的列中获取每个唯一值的百分比?

时间:2020-04-19 17:04:43

标签: python pandas dataframe group-by pandas-groupby

我有一个问题,我在其中填写了事件的年份(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()

1 个答案:

答案 0 :(得分:1)

方法1:

使用crosstab/pivot计算每年的未发生次数,然后将Event_B列切片,然后除以axis=1上的df之和

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

方法2:

您可以使用计算编号。 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%