在 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个。


繁华开满天机
浏览 76回答 2
2回答

德玛西亚99

您可以将issubset每个set组用于掩码:s = df.groupby('h1')['h2'].apply(lambda x: set(["a","b"]).issubset(x))print (s)h1mn     Truepq    Falsers    Falsewe    FalseName: h2, dtype: bool然后过滤索引值:vals = s.index[s]print (vals)Index(['mn'], dtype='object', name='h1')

收到一只叮咚

groupby.filter与 一起使用np.isin:new_df = df.groupby('h1').filter(lambda x: np.isin(['a','b'],x['h2']).all())print(new_df)   h1 h2  h30  mn  a   11  mn  b   1s = df.groupby('h1')['h2'].apply(lambda x: np.isin(['a','b'],x).all())s.index[s]#Index(['mn'], dtype='object', name='h1')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python