以下代码将我的数据框过滤为以赞比亚为国家/地区名称的5行。
df2.loc[df2['Country Name'] == 'Zambia'].head(5)
Country Name Year CO2
262 Zambia 1960 NaN
526 Zambia 1961 NaN
790 Zambia 1962 NaN
1054 Zambia 1963 NaN
1318 Zambia 1964 0.949422
接下来,下面显示的是赞比亚平均CO2值。
df2.groupby('Country Name', as_index=False)['CO2'].mean().loc[df2['Country Name'] == 'Zambia']
Country Name CO2
262 Zambia 0.484002
最后,我现在尝试用平均值填充所有NaN值。请注意,实际上只填写了第一个NaN值。为什么这样做?如何确保每个NaN值都被每个国家/地区的平均值填充了?
df2['CO2'] = df2['CO2'].fillna(value = df2.groupby('Country Name', as_index=False)['CO2'].mean()['CO2'])
Country Name Year CO2
262 Zambia 1960 0.484002
526 Zambia 1961 NaN
790 Zambia 1962 NaN
1054 Zambia 1963 NaN
1318 Zambia 1964 0.949422
答案 0 :(得分:1)
使用GroupBy.transform
来返回Series
,该返回值由与原始DataFrame
大小相同的聚合值填充,因此fillna
运作良好:
s = df2.groupby('Country Name')['CO2'].transform('mean')
df2['CO2'] = df2['CO2'].fillna(value = s)