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