在Pandas DataFrame上选择具有条件的列

时间:2016-06-06 17:57:39

标签: python pandas dataframe conditional-statements

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

    col1    col2
0   something1  something1
1   something2  something3
2   something1  something1
3   something2  something3
4   something1  something2  

我尝试过滤something1col1col2的所有行。如果我只需要列上的条件逻辑,我可以使用df[df.col1 == 'something1']来完成它但是有没有办法用多列来实现它?

3 个答案:

答案 0 :(得分:4)

您可以all使用boolean 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

编辑:

如果需要只选择一些列,您可以使用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

答案 1 :(得分:0)

为什么不呢?

df[(df.col1 == 'something1') | (df.col2 == 'something1')]

输出:

    col1    col2
0   something1  something1
2   something1  something1
4   something1  something2

答案 2 :(得分:0)

对整个数据框应用一种条件

df[(df == 'something1').any(axis=1)]