在 Pandas DataFrame 中根据条件选择列

21

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

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

我想筛选出所有在col1col2中有something1的行。如果只需要对列进行条件逻辑运算,我可以这样做:df[df.col1 == 'something1'] ,但是否有一种方法可以使用多个列进行筛选?

3个回答

16
您可以使用 all布尔索引 一起使用:
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

编辑:

如果需要选择某些列,您可以使用isin布尔索引来选择所需的,然后使用 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

谢谢Jezrael! 另外一个问题:如果我想筛选特定的列(比如只在col1和col2中,但我有其他列),你知道怎么做吗?我猜我需要用别的东西替换.all(1)? - user3368526
这些列的列名有共同部分吗?- col1col2 的共同部分是 col 吗? - jezrael
1
举个例子,如果我有col1、col2和col3,但我只想查看col1和col2而不是col3。 - user3368526

15

为什么不尝试:

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

输出:

    col1    col2
0   something1  something1
2   something1  something1
4   something1  something2

1
为什么不呢...?:):) - user3103059

2
将一个条件应用于整个数据框。
df[(df == 'something1').any(axis=1)]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接