首页 > 解决方案 > 在 pandas 中使用 `isin(list1)` 来识别包含 list1 中所有项目的列中的值

问题描述

对于给定的 pandas 数据框,如下所示,

    h1  h2  h3
    mn  a   1
    mn  b   1
    rs  b   1
    pq  a   1
    we  c   1

如果我使用过滤器isin(),比如说df[df["h2"].isin(["a","b"])]["h1"].unique(),它会导致以下结果:

    h1
    mn
    rs
    pq

我需要找到与列表中所有元素匹配的条目,而不是与列表中任何元素匹配的行为,即所需的输出应该是:

 h1
 mn

这究竟是如何实现的?里面列表的元素个数isin()是任意的,可以多于2个。

标签: pythonpandas

解决方案


您可以将issubset每个set组用于掩码:

s = df.groupby('h1')['h2'].apply(lambda x: set(["a","b"]).issubset(x))
print (s)
h1
mn     True
pq    False
rs    False
we    False
Name: h2, dtype: bool

然后过滤索引值:

vals = s.index[s]
print (vals)
Index(['mn'], dtype='object', name='h1')

推荐阅读