Python 如何检查一列中的值是否可以包含多于另一列中的值

Python 如何检查一列中的值是否可以包含多于另一列中的值,python,pandas,matching,Python,Pandas,Matching,我有以下数据帧: df = pd.DataFrame() df['id'] = [1, 1, 2, 2] df['col1'] = [10, 10, 20, 20] df['col2'] = [100, 200, 50, 50] df['col3'] = [1, 2, 3, 4] 目标 从这个数据帧中,我想返回数据帧的一部分,其中col1中的一个值对于特定的ID可以在col2中具有多个值。在本例中,id“1”在col1中的值为10,在col2中的值为100。由于id“1”在第二行的col1中的

我有以下数据帧:

df = pd.DataFrame()
df['id'] = [1, 1, 2, 2]
df['col1'] = [10, 10, 20, 20]
df['col2'] = [100, 200, 50, 50]
df['col3'] = [1, 2, 3, 4]
目标 从这个数据帧中,我想返回数据帧的一部分,其中col1中的一个值对于特定的ID可以在col2中具有多个值。在本例中,id“1”在col1中的值为10,在col2中的值为100。由于id“1”在第二行的col1中的值也为10,因此col2中的值也应为100。此id不是这种情况,但id“2”是这种情况。它应该以两种方式工作,因此col1和col2的值对于ID应该彼此一致。第3列包含对匹配不重要的其他值,但应该包含在数据帧中

期望输出 数据帧中列值不匹配的部分

df = pd.DataFrame()
df['id'] = [1, 1]
df['col1'] = [10, 10]
df['col2'] = [100, 200]
df['col3'] = [1, 2]

您可以分组并检查col1中每个值的唯一值数,如果为1,则保留该值:

df = df[(df.groupby(['id', 'col1'])['col2'].transform(lambda x: x.nunique()!=1))]
print(df)

id  col1  col2
2    20    50
2    20    50

抱歉,我的虚拟数据不完全正确,让我做一个次要但重要的编辑。我编辑了我的初始帖子,也许你可以再看一看?@bjornvandijkman刚刚编辑,它只是groupby也按id,你现在能看到吗?谢谢!唯一应该更改的是返回列值不匹配的数据帧,我只是将“==”更改为“!=”要做到这一点!