python - 如何从由另一列分组的列中获取每个唯一值的百分比?
问题描述
我有一个问题,我有一列填写了事件的年份(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()
解决方案
方法一:
用于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%
推荐阅读
- c++ - `std::random_device` 和 `std::mt19937_64` 有什么区别?
- c# - Task.WhenAll() 的 C# 异步任务不起作用
- python - 使用熊猫按升序连接值
- xaml - 具有浮点值的文本框也可以接受空值
- python - random tranche age on jupyter python
- python - asyncio 'The future belongs to a different loop than the one specified as the loop argument'
- laravel - laravel 无等待返回页面
- c# - 带有信号器集线器方法的异步/等待
- r - Add multiple functions to ggplot with individual x values
- android - 如何将协调器设计模式应用于基于 MVP 的项目?