我有一个数据框,例如:
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])
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/