找到2个pandas数据帧的行之间的差异

时间:2017-06-21 04:25:56

标签: python pandas join dataframe

我有2个pandas数据帧,它们具有完全相同的列。所以他们看起来像这样:

Dataframe1:
C1 C2 C3
1  A  X
2  B  Y

Dataframe2:
C1 C2 C3
1  A  X
3  C  Z

我想找出这两个数据帧之间的区别。基本上我需要跟随3个输出:

  1. 2个数据帧中没有相同的行 - " 1"在这种情况下
  2. dataframe1中存在行,但dataframe2中缺少

    2  B  Y
    
  3. dataframe2中存在行,但dataframe1中缺少

    3  C  Z
    
  4. 我发现没有相同的行:

    same_line_count = (pd.merge(df1, df2, on=['C1', 'C2', 'C3'], how='inner')).shape[0]
    

    但我无法找到其他2个。

1 个答案:

答案 0 :(得分:2)

我认为您需要merge使用外部联接和参数indicator,以便过滤使用locboolean indexing,并计算相同的行sum布尔值掩码:

print (Dataframe1)
   C1 C2 C3
0   1  A  X
1   2  B  Y
2   2  C  Y

print (Dataframe2)
   C1 C2 C3
0   1  A  X
1   3  C  Z

df = pd.merge(Dataframe1, Dataframe2, indicator=True, how='outer')
print (df)
   C1 C2 C3      _merge
0   1  A  X        both
1   2  B  Y   left_only
2   2  C  Y   left_only
3   3  C  Z  right_only

both = (df['_merge'] == 'both').sum()
print (both)
1

left_only = df.loc[df['_merge'] == 'left_only', Dataframe1.columns]
print (left_only)
   C1 C2 C3
1   2  B  Y
2   2  C  Y

right_only = df.loc[df['_merge'] == 'right_only', Dataframe1.columns]
print (right_only)
   C1 C2 C3
3   3  C  Z