如何根据条件从 Python、Pandas 中的另一列中删除一列中的部分值?
How to drop part of the values from one column by condition from another column in Python, Pandas?
我有一个包含许多异常值和许多观察值的房地产数据框。
我有变量:总数 area
、rooms
的数量(如果房间数 = 0,则为单间公寓)和 kitchen_area
.
从我的数据框中提取“最小化”:
dic = [{'area': 40, 'kitchen_area': 10, 'rooms': 1, 'price': 50000 },
{'area': 20, 'kitchen_area': 0, 'rooms': 0, 'price': 50000},
{'area': 60, 'kitchen_area': 0, 'rooms': 2, 'price': 70000},
{'area': 29, 'kitchen_area': 9, 'rooms': 1, 'price': 30000},
{'area': 15, 'kitchen_area': 0, 'rooms': 0, 'price': 25000}]
df = pd.DataFrame(dic, index=['apt1', 'apt2','apt3','apt4', 'apt5'])
我的目标是消灭apt3,因为法律规定非单间公寓的厨房面积不能小于5平方米。
换句话说,我想从我的数据框中删除所有包含非工作室公寓数据的行(rooms
>0),但 kitchen_area
<5
我试过这样的代码:
df1 = df.drop(df[(df.rooms > 0) & (df.kitchen_area < 5)].index)
但它只是根据我输入的多个条件从 kitchen_area
和 rooms
两列中删除了所有数据。
清洁
mask1 = df.rooms > 0
mask2 = df.kitchen_area < 5
df1 = df[~(mask1 & mask2)]
df1
area kitchen_area rooms price
apt1 40 10 1 50000
apt2 20 0 0 50000
apt4 29 9 1 30000
apt5 15 0 0 25000
pd.DataFRame.query
df1 = df.query('rooms == 0 | kitchen_area >= 5')
df1
area kitchen_area rooms price
apt1 40 10 1 50000
apt2 20 0 0 50000
apt4 29 9 1 30000
apt5 15 0 0 25000
我有一个包含许多异常值和许多观察值的房地产数据框。
我有变量:总数 area
、rooms
的数量(如果房间数 = 0,则为单间公寓)和 kitchen_area
.
从我的数据框中提取“最小化”:
dic = [{'area': 40, 'kitchen_area': 10, 'rooms': 1, 'price': 50000 },
{'area': 20, 'kitchen_area': 0, 'rooms': 0, 'price': 50000},
{'area': 60, 'kitchen_area': 0, 'rooms': 2, 'price': 70000},
{'area': 29, 'kitchen_area': 9, 'rooms': 1, 'price': 30000},
{'area': 15, 'kitchen_area': 0, 'rooms': 0, 'price': 25000}]
df = pd.DataFrame(dic, index=['apt1', 'apt2','apt3','apt4', 'apt5'])
我的目标是消灭apt3,因为法律规定非单间公寓的厨房面积不能小于5平方米。
换句话说,我想从我的数据框中删除所有包含非工作室公寓数据的行(rooms
>0),但 kitchen_area
<5
我试过这样的代码:
df1 = df.drop(df[(df.rooms > 0) & (df.kitchen_area < 5)].index)
但它只是根据我输入的多个条件从 kitchen_area
和 rooms
两列中删除了所有数据。
清洁
mask1 = df.rooms > 0
mask2 = df.kitchen_area < 5
df1 = df[~(mask1 & mask2)]
df1
area kitchen_area rooms price
apt1 40 10 1 50000
apt2 20 0 0 50000
apt4 29 9 1 30000
apt5 15 0 0 25000
pd.DataFRame.query
df1 = df.query('rooms == 0 | kitchen_area >= 5')
df1
area kitchen_area rooms price
apt1 40 10 1 50000
apt2 20 0 0 50000
apt4 29 9 1 30000
apt5 15 0 0 25000