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,你现在能看到吗?谢谢!唯一应该更改的是返回列值不匹配的数据帧,我只是将“==”更改为“!=”要做到这一点!