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

Python 如何从由另一列分组的列中获取每个唯一值的百分比?,python,pandas,dataframe,group-by,pandas-groupby,Python,Pandas,Dataframe,Group By,Pandas Groupby,我有一个问题,我有一列填写了事件年份(2007年、2008年、2019年),另一列填写了事件类型(事件a、事件B、事件C)。我想知道每年发生的事件的百分比是多少 基本上,我有: 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

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

基本上,我有:

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:

使用
crosstab/pivot
计算每年的发生次数,然后对
Event_B
列进行切片,并将其除以
轴=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:

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

(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%