熊猫通过多种条件过滤,无需链接

时间:2020-06-03 07:35:25

标签: python pandas filtering

我想通过必须保持在一起的多个条件来过滤熊猫数据框。

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

2 个答案:

答案 0 :(得分:3)

您当前的代码选择满足以下条件的所有行:

  1. df['price']!=0:价格不为零

返回:

0 True
1 True
2 False
3 False
4 True
  1. ~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]

&