Python 合并索引未按预期运行

Python 合并索引未按预期运行,python,pandas,dataframe,join,Python,Pandas,Dataframe,Join,我试图在一行中执行反连接。但是,我的一行解决方案并没有给我将代码分成两行时接收到的相同结果(其行为与预期的一样)。具体来说,单行解决方案会产生行数较少的数据帧 我的反连接的目标是删除df和df\u subset1的唯一\u id的任何重叠。结果将是df_subset2 单线: df_subset2 = df.loc[df.merge(df_subset1['UNIQUE_ID'], on = 'UNIQUE_ID', how = 'outer', indicator = True)._merge

我试图在一行中执行反连接。但是,我的一行解决方案并没有给我将代码分成两行时接收到的相同结果(其行为与预期的一样)。具体来说,单行解决方案会产生行数较少的数据帧

我的反连接的目标是删除
df
df\u subset1
的唯一\u id的任何重叠。结果将是
df_subset2

单线:

df_subset2 = df.loc[df.merge(df_subset1['UNIQUE_ID'], on = 'UNIQUE_ID', how = 'outer', indicator = True)._merge == 'left_only']
多行:

df_subset2 = df.merge(df_subset1['UNIQUE_ID'], on = 'UNIQUE_ID', how = 'outer', indicator = True)
df_subset2 = df_subset2.loc[df_subset2._merge == 'left_only']

这些都会产生不同的结果,但从我的角度来看,这一行仍应按预期工作。合并是否会更改基础数据帧的索引?这是我能想到的唯一原因,它会导致
.loc
操作选择不同。

要获得一行解决方案,您可以尝试将
df.merge()
调用与以下调用链接:

df_subset2 = df.merge(df_subset1['UNIQUE_ID'], on = 'UNIQUE_ID', how = 'outer', indicator = True).query('_merge == "left_only"') 

df.merge
的结果具有不同的大小(行数),尤其是在使用“外部”联接时。对于您的情况,如果使用左连接而不是外部连接会更好吗?明白了--听起来像是
merge
更改了索引,从而导致
.loc
的行为不同。我不能在这里进行左连接,因为我特别尝试删除与右数据帧的重叠。这就是为什么我要使用指示符并选择where
\u merge==“left\u only”
在这种情况下,请尝试将您的呼叫链接到
.query()
呼叫。详情见下文。因为没有你的测试数据,我没有机会测试它。但是你可以试试。谢谢,这个很好用。我完全忘记了
查询
方法。。。肯定会用这个更进一步