在Pandas DataFrame上选择条件列

use*_*526 6 python conditional-statements dataframe pandas

我有一个看起来像这样的数据框。

    col1    col2
0   something1  something1
1   something2  something3
2   something1  something1
3   something2  something3
4   something1  something2  
Run Code Online (Sandbox Code Playgroud)

我试图筛选都行something1无论是在col1col2。如果我只需要在列上使用条件逻辑,就可以做到这一点,df[df.col1 == 'something1']但是有没有办法在多列上做到这一点?

Nao*_*man 11

为什么不:

df[(df.col1 == 'something1') | (df.col2 == 'something1')]
Run Code Online (Sandbox Code Playgroud)

输出:

    col1    col2
0   something1  something1
2   something1  something1
4   something1  something2
Run Code Online (Sandbox Code Playgroud)


jez*_*ael 6

你可以用allboolean indexing

print ((df == 'something1').all(1))
0     True
1    False
2     True
3    False
4    False
dtype: bool

print (df[(df == 'something1').all(1)])
         col1        col2
0  something1  something1
2  something1  something1
Run Code Online (Sandbox Code Playgroud)

编辑:

如果需要选择某些列,您可以使用isinboolean indexing用于选择所需columns,然后使用subset- df[cols]

print (df)
         col1        col2 col3
0  something1  something1    a
1  something2  something3    s
2  something1  something1    r
3  something2  something3    a
4  something1  something2    a

cols = df.columns[df.columns.isin(['col1','col2'])]
print (cols)
Index(['col1', 'col2'], dtype='object')

print (df[(df[cols] == 'something1').all(1)])
         col1        col2 col3
0  something1  something1    a
2  something1  something1    r
Run Code Online (Sandbox Code Playgroud)