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