Обрабатывать пропущенные значения в python по значению атрибута для всех выборок, принадлежащих к тому же классу, что и данный кортеж? - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть большая база данных жилья, и мне нужно заполнить пропущенные значения с помощью того же класса.Например, в столбце «Спальни» недостающие данные должны быть заполнены средними спальнями домов одинакового / аналогичного размера и цены.Размеры хранятся в кв. Футах в атрибуте «Площадь».Существует много разных значений для атрибутов Area и price, поэтому я немного запутался, как к этому подойти.Есть ли простой способ сделать это в Python?Кроме того, объединение областей в интервалы, чтобы иметь менее отличные значения и найти среднее для каждого интервала более подходящим?

Вот пример данных:

location    bedrooms    Size(sq. ft.)   price
abc             7           4500        5.5 Crore 
cde             6           2250        2.1 Crore 
bda             7           4500        4.75 Crore 
abc             NA          4500        4.5 Crore 
abc             5           2250        2.3 Crore 
bda             NA          1350        54 Lakh 
cde             5           1575        1.6 Crore 
bda             NA          2452        3.25 Crore 
bda             3           1260        95 Lakh 
cde             6           2250        2.15 Crore 
abc             8           4500        3.5 Crore

1 Ответ

0 голосов
/ 20 февраля 2019

Вы можете использовать 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, он не использовал бы среднее значение, имеющее то же местоположение и размер, но другую цену.

Вам понадобится вспомогательный столбец, который определяет меру сходства, чтобы использовать среднее значение диапазона значений.

...