python - 如果列中的元素全部出现在列表中并且 pandas 中没有其他内容,则 Oly 子集分组

标签 python pandas

我有一个数据框,例如:

The_list=["A","B","D"]

Groups Values
G1     A
G1     B
G1     C
G1     D
G2     A
G2     B
G2     A
G2     D
G3     A
G3     D
G4     Z
G4     D
G4     E
G4     C
G5     A
G5     B
G5     D

我只想对 Groups 进行子集化,其中 Values 元素都在 The_list 中,并且该组中没有其他元素不存在于 The_list 中。

在这里我应该只取子集:

Groups Values
G2     A
G2     B
G2     A
G2     D
G5     A
G5     B
G5     D

到目前为止我尝试过:

df.loc[df.Values.str.contains["A" & "B" & "D"].groupby(df.Groups)]

最佳答案

您可以使用pandas.groupby在列 Groups 上,然后使用 set the_list 检查set 组的每个值,并返回组具有 True 值的所有行:

The_list=["A","B","D"]
mask_rows = df.groupby('Groups')['Values'].transform(
    lambda x : set(x) == set(The_list)
)
print(df[mask_rows])

简短的答案为 Paul H使用filter分组后:

print(df.groupby("Groups").filter(lambda g: set(g["Values"]) == set(The_list)))

输出:

Groups Values
G2     A
G2     B
G2     A
G2     D
G5     A
G5     B
G5     D

关于python - 如果列中的元素全部出现在列表中并且 pandas 中没有其他内容,则 Oly 子集分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72678015/

相关文章:

python - 如果你在python中单独写一个变量名会发生什么?

python - 使用 Pandas 将文本数据从请求对象转换为数据框

python - 在 Python 中为单个操作设置并行度

python - 如何使用 session 的权重来初始化新 session 的权重?

Python-pptx - Autoshape 上的文本参数(字体、大小、位置)

Python HTTP Server - 在不使用 HTTP 模块的情况下创建

python - 来自 Pandas Dataframe 的 Sum、Cumsum、Percetage、Cum Percentage

python - 在 pandas 字符串列中查找多个关键字的更有效方法

python - pandas - 逐行应用带条件的替换函数

python - 如何找出 pandas groupby 对象中唯一行的数量?