Как панды заменяют значения NaN средним значением, используя groupby [duplicate]

1

Я попытался использовать это, чтобы заменить значения NaN в счете функции столбца (целое число от 1 до 10) с помощью groupby (client_id или имя клиента _), однако значения NaN, похоже, не идут.

df['feature_count'].isnull().sum()

Выход:

2254

Теперь я использую:

df['feature_count'].fillna(df.groupby('client_name')['feature_count'].mean(), inplace=True)

Но выход остается неизменным:

df['feature_count'].isnull().sum()

2254

Любой другой способ заменить значения NaN с помощью других значений не NaN столбца, сгруппированного по их идентификаторам?

Теги:
pandas
pandas-groupby
group-by
fillna

1 ответ

2
Лучший ответ

df.groupby('client_name')['feature_count'].mean() возвращает серию.

Но вы не хотите заменять нулевые значения серией. Вместо этого вы хотите заменить нулевые значения средним отображением из серии.

Поэтому вы можете использовать следующее:

s = df.groupby('client_name')['feature_count'].mean()
df['feature_count'].fillna(df['client_name'].map(s), inplace=True)

Еще более Pandorable будет использовать pd.DataFrame.transform, который обрабатывает часть отображения для вас:

s = df.groupby('client_name')['feature_count'].transform('mean')
df['feature_count'].fillna(s, inplace=True)
  • 0
    Я попробовал то, что вы предложили, значения NaN не исчезли полностью, они снизились с 2254 до 529
  • 0
    @KrishnaDhruv, думаю, что некоторые из ваших групп могут быть все NaN , взгляните на ваш вклад. В противном случае вам нужно будет предоставить минимальный воспроизводимый пример .
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню