我有一个DataFrame,我正在尝试查找某些事件的发生频率。因此,例如,它列出如下
Month Year Event UniqueID
1 2018 A 01
1 2018 A 02
2 2018 B 03
....
等等。我每年都按活动频率对所有内容进行分组。我通过使用以下代码做到了这一点。
这计算了所有事件,所以我可以平均它们
df.groupby(['Year','Month','Event'])['Event'].size().rename('Count of Events').reset_index()
这给了我们一些类似于
Year Month Event Count of Events
2018 01 A 2
2018 02 B 1
...
然后,通过使用
df.groupby(['Event'])['Count of Events'].mean()
这给了我平均值。但是我注意到的一件事是我可能有差距。例如,事件“ A”可能发生在1月和2月,而不是3月,因此这不会给我一年的真实“平均值”。填补这些孔的最佳方法是什么?例如,在上面的示例列表中,
Month Year Event Count of Events
1 2018 A 02
1 2018 B 00
1 2018 C 00
2 2018 A 00
2 2018 B 00
2 2018 B 01
...
在我平均之前,这将是最佳的最终结果。谢谢!
最佳答案
您已接近解决方案。分组后,将数据框解堆叠为“宽”格式(这样,您将拥有一个月和一年的每种组合),将缺失的值填充为0,然后将其堆叠回去:
df.groupby(["Month", "Year", "Event"]).size().unstack().fillna(0).stack()
#Month Year Event
#1 2018 A 2.0
# B 0.0
#2 2018 A 0.0
# B 1.0