Python 筛选包含特定值的多个列
我有这样一个数据帧:Python 筛选包含特定值的多个列,python,pandas,filtering,Python,Pandas,Filtering,我有这样一个数据帧: col1 col2 col3 col4 A W Z C F W P F E P Y C B C B C M A V C D O X A Y L Y D Q V R A 我想筛选多个列是否具有特定值。例如,我想筛选包含A的行。因此,它应该是: col1 col
col1 col2 col3 col4
A W Z C
F W P F
E P Y C
B C B C
M A V C
D O X A
Y L Y D
Q V R A
我想筛选多个列是否具有特定值。例如,我想筛选包含A
的行。因此,它应该是:
col1 col2 col3 col4
A W Z C
M A V C
D O X A
Q V R A
因为它只是大型数据集的一个小表示,所以我不能同意
df[(df['col1'].str.contains('A')) | (df['col2'].str.contains('A')) | (df['col3'].str.contains('A')) |
(df['col4'].str.contains('A'))]
还有其他方法吗?这里有一种方法可以做到:
df[df.applymap(lambda x: x == 'A').any(1)]
col1 col2 col3 col4
0 A W Z C
4 M A V C
5 D O X A
7 Q V R A
对于多种情况,您可以像A
,B
:
df[df.applymap(lambda x: x in ['A','B']).any(1)]
您可以沿
轴=1使用应用
和任意
:
df[df.apply(lambda x: x.str.contains('A')).any(1)]
或:
我们可以使用+和
或@Alollz建议的更好的解决方案
df[df.stack().str.contains('A').any(level=0)]
输出
col1 col2 col3 col4
0 A W Z C
4 M A V C
5 D O X A
7 Q V R A
更新
要检查多个字符,请使用join
df[df.stack().str.contains('|'.join(['A','B'])).any(level=0)]
col1 col2 col3 col4
0 A W Z C
3 B C B C
4 M A V C
5 D O X A
7 Q V R A
谢谢你的回答@YOLO。你能解释一下any(1)
的功能是什么吗?any(1)
按行检查是否有任何“A”存在,如果是,它将返回一个TRUE
谢谢,这看起来很好。只是一个小问题:如果这是一个类似于['a','B']
的列表,而不仅仅是a
,我如何制作过滤器?因为我无法为字符串生成isin
语句。您甚至不需要取消堆栈
<代码> < <代码> >可以在<代码>索引< /代码>级别上操作:<代码> df.STACK()。STR包含((a))。任何(级别=0)< /代码>都可以得到掩码。“ALollz非常好,我应该探索很多:”我认为只有聚合函数具有PARAM的级别,但是没有考虑任何YAYE,<代码>任何< /代码>,sum
和其他一些支持level
参数。与df.groupby(level=0.sum()
)相比,df.sum(level=0.sum)没有任何真正的好处,除了它不那么冗长。你是对的:)我总是忘记我可以在@ALollz做这件事
df[df.stack(dropna=False).str.contains('A').unstack().any(axis=1)]
df[df.stack().str.contains('A').any(level=0)]
col1 col2 col3 col4
0 A W Z C
4 M A V C
5 D O X A
7 Q V R A
df[df.stack().str.contains('|'.join(['A','B'])).any(level=0)]
col1 col2 col3 col4
0 A W Z C
3 B C B C
4 M A V C
5 D O X A
7 Q V R A