Pandas: как заполнить нулевые значения средним значением groupby?
у меня есть набор данных недостающие данные, что выглядит так:
id category value
1 A NaN
2 B NaN
3 A 10.5
4 C NaN
5 A 2.0
6 B 1.0
мне нужно заполнить нули, чтобы использовать данные в модели. Каждый раз, когда категория возникает в первый раз, она равна NULL. То, что я хочу сделать, это для таких случаев, как category A
и B
которые имеют более одного значения, заменяют нули средним значением этой категории. И для категории C
только с одним вхождением просто заполните среднее значение остальных данных.
Я знаю что я могу просто сделать это для таких случаев, как C
чтобы получить среднее значение всех строк, но я застрял, пытаясь сделать categorywise средства для A и B и замены нулей.
df['value'] = df['value'].fillna(df['value'].mean())
мне нужно, чтобы окончательный df был таким
id category value
1 A 6.25
2 B 1.0
3 A 10.5
4 C 4.15
5 A 2.0
6 B 1.0
2 ответов
Я думаю, вы можете использовать groupby
и apply
fillna
С mean
. Тогда вам NaN
если какая-то категория имеет только NaN
значения, поэтому использовать mean
всех значений столбца для заполнения NaN
:
df.value = df.groupby('category')['value'].apply(lambda x: x.fillna(x.mean()))
df.value = df.value.fillna(df.value.mean())
print (df)
id category value
0 1 A 6.25
1 2 B 1.00
2 3 A 10.50
3 4 C 4.15
4 5 A 2.00
5 6 B 1.00
вы также можете использовать GroupBy
+ transform
заполнить NaN
значения со средствами groupwise. Этот метод позволяет избежать неэффективного apply
+ lambda
. Например:
df['value'] = df['value'].fillna(df.groupby('category')['value'].transform('mean'))
df['value'] = df['value'].fillna(df['value'].mean())