如何在pandas中使用基于DataFrame布尔值的条件语句

iNo*_*oob 5 python pandas

现在我知道如何检查数据帧中多列的特定值.但是,我似乎无法弄清楚如何基于布尔响应执行if语句.

例如:

使用os.walk特定文件并将特定文件读入数据帧.

for root, dirs, files in os.walk(main):
        filters = '*specificfile.csv'
        for filename in fnmatch.filter(files, filters):
        df = pd.read_csv(os.path.join(root, filename),error_bad_lines=False)
Run Code Online (Sandbox Code Playgroud)

现在检查跨多个列的数据帧.第一个值是列名(column1),下一个值是我在该列(香蕉)中查找的特定值.然后我检查另一列(column2)的特定值(绿色).如果这两个都是真的,我想执行一项特定的任务.但是如果它是假的我想做别的事情.

像这样的东西:

if (df['column1']=='banana') & (df['colour']=='green'):
    do something
else: 
    do something
Run Code Online (Sandbox Code Playgroud)

Ana*_*mar 10

如果您想检查DataFrame的任何行是否符合您的条件,您可以使用.any()您的条件.示例 -

if ((df['column1']=='banana') & (df['colour']=='green')).any():
Run Code Online (Sandbox Code Playgroud)

示例 -

In [16]: df
Out[16]:
   A  B
0  1  2
1  3  4
2  5  6

In [17]: ((df['A']==1) & (df['B'] == 2)).any()
Out[17]: True
Run Code Online (Sandbox Code Playgroud)

这是因为你的条件 - ((df['column1']=='banana') & (df['colour']=='green'))返回一系列真/假值.

这是因为在pandas中将系列与标量值进行比较时,它返回将该系列的每一行与标量值进行比较的结果,结果是一系列True/False值,表示该行与之比较的结果.标量值.示例 -

In [19]: (df['A']==1)
Out[19]:
0     True
1    False
2    False
Name: A, dtype: bool

In [20]: (df['B'] == 2)
Out[20]:
0     True
1    False
2    False
Name: B, dtype: bool
Run Code Online (Sandbox Code Playgroud)

对于这两个系列而言,&它确实是行列式的and.示例 -

In [18]: ((df['A']==1) & (df['B'] == 2))
Out[18]:
0     True
1    False
2    False
dtype: bool
Run Code Online (Sandbox Code Playgroud)

现在要检查此系列中的任何值是否为True,您可以使用.any(),检查系列中的所有值是否为True,您可以使用.all().