我想通过必须保持在一起的多个条件来过滤熊猫数据框。
d = {'price': [1, 2, 0 ,0,1], 'description': ['a', 'a','b','c','e']}
df = pd.DataFrame(data=d)
li = ['a','b']
df = df[(df['price']!=0) & (~df['description'].isin(li))]
问题是,它删除了所有等于0的价格,然后删除了li中的所有thats。 我希望它删除数据框中同时包含这两个条件而不只是其中之一的行。
预期输出为:
price description
1 a
2 a
0 c
1 e
但是它是:
price description
1 e
答案 0 :(得分:3)
您当前的代码选择满足以下条件的所有行:
df['price']!=0
:价格不为零返回:
0 True
1 True
2 False
3 False
4 True
~df['description'].isin(li)
:说明中没有li 返回:
0 False
1 False
2 False
3 True
4 True
这两个布尔数组的组合导致:
(df['price']!=0) & (~df['description'].isin(li))
>> 0 False
>> 1 False
>> 2 False
>> 3 False
>> 4 True
也就是说,只有数据框的最后一行(价格= 1,说明= e)满足这两个条件。
根据您的描述,您可能希望使用“或”运算符|
:
(df['price']!=0) | (~df['description'].isin(li))
>> 0 True
>> 1 True
>> 2 False
>> 3 True
>> 4 True
将仅删除(price = 0,description = b)的行。
希望有帮助! 干杯, T
答案 1 :(得分:1)
根据您编辑的预期输出,
只需用或t
替换和theta = [R t]
&