Fillna не работает в сочетании с групповым и злым - PullRequest
1 голос
/ 09 апреля 2019

Приведенный ниже код фильтрует мой Dataframe для 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

1 Ответ

1 голос
/ 09 апреля 2019

Используйте GroupBy.transform для возврата Series, заполненного совокупными значениями того же размера, что и оригинал DataFrame, поэтому fillna работает нормально:

s = df2.groupby('Country Name')['CO2'].transform('mean')
df2['CO2'] = df2['CO2'].fillna(value = s)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...