Python 基于过滤器在数据帧中生成新列

Python 基于过滤器在数据帧中生成新列,python,pandas,dataframe,Python,Pandas,Dataframe,给定此数据帧: df = pandas.DataFrame({"a": [1,10,20,3,10], "b": [50,60,55,0,0], "c": [1,30,1,0,0]}) 如果a列和b列的值都大于x,则使值通过的新列、过滤器的最佳方式是什么?否则,值失败 可以通过迭代行来完成,但效率低且不美观: c = [] for x, v in df.iterrows(): if v["a"] >= 20 and v["b"] >= 20: c.ap

给定此数据帧:

df = pandas.DataFrame({"a": [1,10,20,3,10], "b": [50,60,55,0,0], "c": [1,30,1,0,0]})
如果a列和b列的值都大于x,则使值通过的新列、过滤器的最佳方式是什么?否则,值失败

可以通过迭代行来完成,但效率低且不美观:

c = []

for x, v in df.iterrows():
     if v["a"] >= 20 and v["b"] >= 20:
         c.append("pass")
     else:
         c.append("fail")

df["filter"] = c

一种方法是创建一列布尔值,如下所示:

>>> df['filter'] = (df['a'] >= 20) & (df['b'] >= 20)
    a   b   c filter
0   1  50   1  False
1  10  60  30  False
2  20  55   1   True
3   3   0   0  False
4  10   0   0  False
然后,可以使用替换将布尔值更改为“通过”或“失败”:

您可以使用all将其扩展到更多列。例如,要查找条目大于0的列中的行,请执行以下操作:

>>> cols = ['a', 'b', 'c'] # a list of columns to test
>>> df[cols] > 0 
      a      b      c
0  True   True   True
1  True   True   True
2  True   True   True
3  True  False  False
4  True  False  False
使用此数据框的所有轴1创建新列:

>>> (df[cols] > 0).all(axis=1)
0     True
1     True
2     True
3    False
4    False
dtype: bool

一种方法是创建一列布尔值,如下所示:

>>> df['filter'] = (df['a'] >= 20) & (df['b'] >= 20)
    a   b   c filter
0   1  50   1  False
1  10  60  30  False
2  20  55   1   True
3   3   0   0  False
4  10   0   0  False
然后,可以使用替换将布尔值更改为“通过”或“失败”:

您可以使用all将其扩展到更多列。例如,要查找条目大于0的列中的行,请执行以下操作:

>>> cols = ['a', 'b', 'c'] # a list of columns to test
>>> df[cols] > 0 
      a      b      c
0  True   True   True
1  True   True   True
2  True   True   True
3  True  False  False
4  True  False  False
使用此数据框的所有轴1创建新列:

>>> (df[cols] > 0).all(axis=1)
0     True
1     True
2     True
3    False
4    False
dtype: bool

很好,但是对于任意多个列a、b、c,你会怎么做。。。?ie如何通过for循环编译该表达式?@user248237dfsf-我在回答中添加了:在这种情况下,您可以全部使用。很好,但是对于任意多个列a、b、c,您将如何进行编译。。。?ie如何通过for循环编译该表达式?@user248237dfsf-我的答案是:在这种情况下,您可以使用all。