Pandas合并是笛卡尔积而不是内连接



我有两个相同的框架,而不是试图将它们内连接,我得到了一个笛卡尔积。你知道是什么引起的吗?我的列的类型是Int64。

df1 = 
operationid  siteid
632126      66
632126      66
df2 = 
operationid  siteid
632126      66
632126      66

df1.merge(df2 , how = 'inner' , on = [operationid , siteid ])

,我希望

operationid  siteid
632126      66
632126      66

得到

operationid  siteid
632126      66
632126      66
632126      66
632126      66

如果在df1和df2中有唯一的记录,您将得到的预期输出。删除副本并尝试合并它们。

您可以使用drop_duplicates()函数在合并之前删除其中一个数据帧中的重复项:

df1 = df1.drop_duplicates()
desired_df = df1.merge(df2 , how = 'inner' , on = ['operationid' , 'siteid'])
print(desired_df)

输出:

operationid  siteid
0       632126      66
1       632126      66

你也可以选择先检查两个数据帧是否相同,如果true选择其中一个,如果false继续合并它们,它应该输出相同的结果:

desired_df = pd.DataFrame()
if df1.equals(df2) == True:
desired_df = df1
else:
desired_df = df1.merge(df2 , how = 'inner' , on = ['operationid' , 'siteid'])

print(desired_df)

最新更新