Вы можете использовать groupby и transform метод в Python, чтобы получить желаемые результаты.
Пример:
d = {'col1': ['a', 'b', 'a', 'a', 'b', 'a'], 'col2': [3, 4, None, 5, None, 7], 'col3':[4,5,6,7,8,6]}
df = pd.DataFrame(data=d)
Вывод:
col1 col2 col3
0 a 3.0 4
1 b 4.0 5
2 a NaN 6
3 a 5.0 7
4 b NaN 8
5 a 7.0 6
Теперь используется метод группировки и преобразования:
df["col2"] = df.groupby("col1").transform(lambda x: x.fillna(x.mean()))
Вывод
col1 col2 col3
0 a 3.0 4
1 b 4.0 5
2 a 5.0 6
3 a 5.0 7
4 b 4.0 8
5 a 7.0 6
Как видите, значения Nan в col2 были заменены на среднее значение класса в col1.Например, индекс два стал 5, который равен (3 + 5 + 7) / 3, а индекс 4 стал 4, что составляет 4/1.
Если в вашем случае, если вы хотите добавить несколько столбцов в качестве «группировщика», вы можете просто передать больше столбцов в методе groupby, чтобы сделать это.Однако они будут принимать среднее значение только тех значений, для которых значения Excatly одинаковы во всех столбцах.В вашем случае вы можете сделать следующее:
df["bedrooms"] = df.groupby(["location","Size(sq. ft.)", "price"]).transform(lambda x: x.fillna(x.mean()))
Так, например, если местоположение было abc
, размер был 4000
, а цена была 2000
, для всех значений использовалось бы среднее значение.где эти три значения одинаковы.Однако если бы у вас был столбец с abc
, размер был 4000
, а цена была 2001
, он не использовал бы среднее значение, имеющее то же местоположение и размер, но другую цену.
Вам понадобится вспомогательный столбец, который определяет меру сходства, чтобы использовать среднее значение диапазона значений.