按不匹配设置筛选数据帧组

2024-05-31 23:35:28 发布

您现在位置:Python中文网/ 问答频道 /正文

给定此数据帧和集合:

df = pd.DataFrame({'blah':['cats','cats','dogs','dogs','snakes','snakes','bears','bears'],
                   'foo':['A', 'B', 'B', 'A', 'A', 'B', 'A', 'A']})
   
    blah    foo
0   cats    A
1   cats    B
2   dogs    B
3   dogs    A
4   snakes  A
5   snakes  B
6   bears   A
7   bears   A

letters = set(['A', 'B'])

{'A', 'B'}

我想过滤数据帧,使其只包括blah组,其中set(foo)letters不匹配

我的预期结果是:

    blah    foo
6   bears   A
7   bears   A

下面是我得到的最接近的东西,但我不知道如何与letters进行比较,我不想返回数据帧而不是序列

df.groupby('blah')['foo'].apply(set)

Tags: 数据dataframedffoo序列pdbearsapply
2条回答

这应该起作用:

df.loc[df['blah'].map(df.groupby('blah').agg(set)['foo'].ne(letters))]

此答案检查每个组的foo内的值集是否不等于letters集。用于索引原始数据的:

>>> mask = df.groupby('blah')['foo'].apply(lambda x: set(x) != letters)
>>> df[df['blah'].map(mask)]

    blah foo
6  bears   A
7  bears   A

相关问题 更多 >