Python 在pandas中使用'isin(list1)`标识包含列表1中所有项的列中的值

Python 在pandas中使用'isin(list1)`标识包含列表1中所有项的列中的值,python,pandas,Python,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  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个。

您可以使用
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')

您可以将
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')
用于:


用于: