Python 在比较数据帧时标识唯一行
我有两个数据帧,具有相同的列,具有可能相交的行:Python 在比较数据帧时标识唯一行,python,pandas,Python,Pandas,我有两个数据帧,具有相同的列,具有可能相交的行: df1 df2 A B A B m m 1 2 1 2 3 4 3 4 5 6 5 6 x x n n y y 我需要确定哪些行在df1中,而不是df2中,反之亦然。解决方案数据帧可能如下所示: indf1_notindf2 A B m m n n indf2_notindf1 A B x x y y 或者只是一个数据帧,如下所示: A B FLAG m m only_df1 n n o
df1 df2
A B A B
m m 1 2
1 2 3 4
3 4 5 6
5 6 x x
n n y y
我需要确定哪些行在df1中,而不是df2中,反之亦然。解决方案数据帧可能如下所示:
indf1_notindf2
A B
m m
n n
indf2_notindf1
A B
x x
y y
或者只是一个数据帧,如下所示:
A B FLAG
m m only_df1
n n only_df1
x x only_df2
y y only_df2
或者其他解决方法
我曾尝试连接两个数据帧并删除重复的数据帧,但我不知道这些行来自哪个数据帧。感谢您的帮助。注意:两个数据帧的实际大小大约为500k行。执行以下操作:
df1['FLAG'] = 'only_df1'
df2['FLAG'] = 'only_df2'
df = df1.append(df2).drop_duplicates(['A','B'], keep=False)
执行以下操作:
df1['FLAG'] = 'only_df1'
df2['FLAG'] = 'only_df2'
df = df1.append(df2).drop_duplicates(['A','B'], keep=False)
这里有一种方法可以使用:
这里有一种方法可以使用: 这是由于
指示器=True
+:
然后,您可以使用字典将
仅左
重新映射到df1
,并根据方便程度将仅右
重新映射到。这是使用指示器=真
+:
然后,您可以使用字典将仅左
重新映射到df1
,并根据需要将仅右
重新映射到
m = df1.merge(df2,on=[*df1],how='outer',indicator=True).query("_merge!='both'")
print(m)
A B _merge
0 m m left_only
4 n n left_only
5 x x right_only
6 y y right_only