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())