我有这样一个数据帧:

   C1  C2  C3  C4
1  A   B   C   E
2  C   D   E   F
3  A   C   A   B
4  A   A   B   G
5  B   nan C   E

和列表:

filt = [A, B, C]

我需要的是一个过滤器,它只将值为all的行从filt保留为任何顺序或位置.所以这里的输出是:

   C1  C2  C3  C4
1  A   B   C   E
3  A   C   A   B  

我看了之前的问题,比如Check multiple columns for multiple values and return a dataframe.然而,在这种情况下,OP只是部分匹配.在我的例子中,所有值都必须以任何顺序出现,才能匹配行.

推荐答案

一种解决方案

使用:

fs_filt = frozenset(filt)
mask = df.apply(frozenset, axis=1) >= fs_filt
res = df[mask]
print(res)

Output

  C1 C2 C3 C4
0  A  B  C  E
2  A  C  A  B

其思想是将每行转换为fronzenset,然后验证filt的fronzenset是否是该行元素的子集(>=).

Python相关问答推荐

Python—转换日期:价目表到新行

为什么我的sundaram筛这么低效

用两个字符串构建回文

对于标准的原始类型注释,从键入`和`从www.example.com `?

从列表中分离数据的最佳方式

查找数据帧的给定列中是否存在特定值

具有不同坐标的tkinter canvs.cocords()和canvs.moveto()

来自任务调度程序的作为系统的Python文件

使用_in链接操作管道传输的中间结果是否可用于链中的后续函数?

如何使用aiohttp获取图像并直接处理它而不保存它?

在极坐标中添加列总计行

Python-迭代PANAS中的数据框并替换列表中不包含字符串的值

提取子数组,然后在Python中将它们连接起来

Pandas 滚动着进化的windows

有可能得到事实的最后特征

在Pandas 中通过GroupBy操作创建新列时出现KeyError

PythonC扩展比Numba JIT快吗?

Pandas 中的每行布尔运算

在Python中用两个图像制作一个图像

我很难用Python Pandas打开旧格式的XLS文件