У меня есть панда DataFrame
с двумя группами 'A'
и 'B'
, и в каждой группе отсутствует один элемент.
df4 = pd.DataFrame({'Name' : ['A', 'A', 'A', 'A', 'B', 'B', 'B'],
'X' : [0, 0.5,1, np.nan, 1,np.nan,1]})
Name X
A 0.0
A 0.5
A 1.0
A nan
B 1.0
B nan
B 1.0
Я хотел бы использовать лямбда-функцию длязаполните недостающие данные для каждой группы
Правильное поведение при использовании x.mean()
df4.groupby('Name')['X'].transform(lambda x: x.fillna(x.mean()))
0 0.0
1 0.5
2 1.0
3 0.5 <------ Filled as 0.5
4 1.0
5 1.0 <------ Filled as 1
6 1.0
Если я использую x.mean()
, как показано выше, поведение правильное, так как в группе A,среднее значение составляет 1.5/3
, что составляет 0.5
.То же самое относится и к группе B.
Странное поведение при использовании x.std()
Однако, если я использую x.std()
, заполненное число не имеет смысла для меня.Для группы A существует только три существующих элемента, 0
, 0.5
и 1.0
, и их стандартное отклонение должно составлять 0.408
.Тем не менее, лямбда-функция дает мне следующий вывод:
df4.groupby('Name')['X'].transform(lambda x: x.fillna(x.std()))
0 0.0
1 0.5
2 1.0
3 0.5 <------ Filled as 0.5 instead of 0.4082
4 1.0
5 0.0 <------ Correct
6 1.0
Может кто-нибудь объяснить поведение?Откуда взялась эта 0,5?