python - 检查列中的值是否是另一个数组的超集

标签 python pandas pandas-groupby

我有这个数据作为例子。我需要检查哪些 a 值具有 b 的所有对应值。例如,哪个 a 具有所有 [1,2] 对应的 b 值。

In [1]:
    df = pd.DataFrame( {'a':['A','A','A','B','B','B','C','C'], 'b':[1,2,3,2,3,4,1,2]})
    df

Out[1]: 
        a   b
    0   A   1
    1   A   2
    2   A   3
    3   B   2
    4   B   3
    5   B   4
    6   C   1
    7   C   2

所以对于这个例子我想返回一个列表

    a
0   A
1   C

['A', 'B']

首先,我认为我应该为每个 a 生成一个 b 值列表

In [2]:
    df1 = df.groupby('a')['b'].apply(list).reset_index(name='b_list')
    df1

Out[2]: 
        a   b_list
    0   A   [1, 2, 3]
    1   B   [2, 3, 4]
    2   C   [1, 2]

假设这是正确的第一步,下一步我应该做什么?

我非常感谢仅使用 pandas 提供的工具的解决方案

最佳答案

使用数据透视表:

df.pivot('a','b','a').dropna(subset=[1,2]).index

或者使用groupby:

df.groupby('a').b.apply(lambda x: set(x.tolist()).issuperset([1,2]))

或者如果您需要将其放在列表中:

(
    df.groupby('a')
    .b.apply(lambda x: set(x.tolist()).issuperset([1,2])).loc[lambda x: x]
    .index.tolist()
)

关于python - 检查列中的值是否是另一个数组的超集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59949165/

相关文章:

python - Pandas groupby plot 给出了第一个 plot 两次

Pandas 按年份分组按 n 个最大值过滤数据框

python - 使用 Pandas 按组获取计数

python - 如何从 QListWidget 拖放到 ComboBox 中

python - 如何使用 OpenCV 和 Python 提取最大连通分量?

python - 根据三列中的匹配值将多个数据框合并为单个数据框

python - 使用语言环境设置将西类牙语日期转换为 python pandas datetime 对象

python - Pandas Groupby 在不同轴上使用多个标准

python - 在python中拆分多个单词

python - selenium.common.exceptions.WebDriverException : Message: 'chromedriver' executable needs to be in PATH error with Headless Chrome