Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 筛选包含特定值的多个列_Python_Pandas_Filtering - Fatal编程技术网

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