Замена данных в существующем DataFrame по условию
В DataFrame есть список комнат от 0 до 19. Необходимо привеси его в соответствие.
Все данные с значениями комнат = 0 убрать из DataFrame, а все данные с комнатами > 4 включить, заменить на 4.
Пробовал несколько методов:
data["rooms"] = data["rooms"].drop(np.where(data['rooms'] == 0)[0])
data["rooms"] = data[data["rooms"] >= 4 ].replace((data["rooms"] >= 4), 4)
Второй:
rooms_data = data.drop(np.where(data['rooms'] == 0)[0])
def rooms_data_norma(row):
if row['rooms'] >= 4:
return row['rooms'] == 4
else:
return row['rooms']
В итоге, удалось уйти от 0 значений, но не удалось все, что больше значения заменить на необходимое в том же DataFrame.
Необходимо: в DataFrame должно остаться только строки, где изначально не было 0 и все что больше 4 должно замениться на 4.
Может быть есть метод легче и который сработает?
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
Читаем входные данные:
In [146]: df = pd.read_csv(r"D:\download\SjdGD89n.txt")
In [147]: df
Out[147]:
rooms
0 3
1 1
2 2
3 0
4 2
5 1
6 1
7 0
8 1
9 3
10 0
11 2
12 2
13 2
14 1
15 1
16 19
17 1
18 1
19 5
20 3
21 7
22 2
23 4
24 2
25 3
26 4
27 3
28 1
29 3
Решение:
df["rooms"] = df["rooms"].clip(0, 4)
df = df.query("rooms > 0")
Результат:
In [176]: df
Out[176]:
rooms
0 3
1 1
2 2
4 2
5 1
6 1
8 1
9 3
11 2
12 2
13 2
14 1
15 1
16 4
17 1
18 1
19 4
20 3
21 4
22 2
23 4
24 2
25 3
26 4
27 3
28 1
29 3