【问题标题】:find difference between rows of 2 pandas dataframe查找 2 个 pandas 数据框的行之间的差异
【发布时间】:2017-06-21 04:25:55
【问题描述】:

我有 2 个具有完全相同列的熊猫数据框。所以它们看起来像这样:

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
    

我没有找到与以下相同的行:

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

但我找不到其他 2 个号码。

【问题讨论】:

    标签: python pandas join dataframe


    【解决方案1】:

    我认为您需要 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-16
      • 1970-01-01
      • 1970-01-01
      • 2022-11-22
      • 1970-01-01
      • 2021-01-14
      • 2017-05-31
      相关资源
      最近更新 更多