我有一个 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
关于python - 将缺失的月份添加到具有空值的数据框中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54635454/