Pandas DataFrame的行,包含列表的所有值



我有一个这样的DataFrame:

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]

我需要的是一个过滤器,它只保留具有所有filt值的行,按任何顺序或位置。所以这里的输出是:

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

我已经看过以前的问题,比如检查多列中的多个值并返回数据帧。然而,在这种情况下,OP只是部分匹配。在我的情况下,所有值都必须以任何顺序存在,才能匹配行。

一个解决方案

用途:

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

输出

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

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

最新更新