Я обращаюсь к этой ссылке для справки о том, почему "среднее от среднего" является НЕПРАВИЛЬНЫМ подходом для этого.
Если у вас есть данные, лучше суммировать совокупности и события и разделите их.
Пример:
df = pd.DataFrame({
'continent':['europe', 'europe', 'america', 'america'], 'year':[1987, 1987, 1987, 1987], 'country': ['albania','germany', 'canada', 'mexico'], 'population': [50, 100, 60, 70], 'events':[8, 10, 7, 4]
})
df['ratio'] = df.events / df.population
ratio_BAD = df.groupby('continent')['ratio'].mean().reset_index()
Это выведет:
continent ratio
0 america 0.086905
1 europe 0.130000
Теперь, в качестве альтернативы, давайте просуммируем значения и разделим:
continents = df.groupby('continent')[['population', 'events']].sum().reset_index()
continents['ratio_GOOD'] = population.events / population.population
continent
population events ratio_GOOD
0 america 130 11 0.073333
1 europe 150 18 0.120000
Значит, значения разные, и вы бы предпочли последний подход.