【问题标题】:Compare two dataframes and keep the rows that overlap比较两个数据框并保留重叠的行
【发布时间】:2020-10-24 23:52:20
【问题描述】:

我有两个数据框:一个有单列 (A),另一个有两列 (B)。我想将数据框 A 与数据框 B 的列进行比较(A 包含与 B 中的列相同类型的数据,并且某些行重叠)。然后我想保留重叠的数据框 B 的行。

例子:

A = pd.DataFrame([['Smile1'], ['Smile4'], ['Smile6']], columns=['Smiles'])

B = pd.DataFrame([[24, 'Smile1'], [33, 'Smile2'], [2, 'Smile3'], 
[85, 'Smile4'], [68, 'Smile5'], [102, 'Smile6']], columns=['ID', 'Smiles'])

在本例中,我想保留 Smile1、4 和 6 及其 ID,最好创建一个包含这些列的新数据框,如下所示:

C = pd.DataFrame([[24, 'Smile1'], [85, 'Smile4'], [102, 'Smile6']], columns=['ID', 'Smiles'])

我的实际数据框要大得多。

感谢您的宝贵时间!

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:
    B[B["Smiles"].isin(A["Smiles"])]
    

    输出:

    Out[8]: 
        ID  Smiles
    0   24  Smile1
    3   85  Smile4
    5  102  Smile6
    

    【讨论】:

      【解决方案2】:

      检查

      C = B[B['Smiles'].isin(A['Smiles'])]
      C
      Out[73]: 
          ID  Smiles
      0   24  Smile1
      3   85  Smile4
      5  102  Smile6
      

      【讨论】:

        【解决方案3】:

        您可以使用pd.DataFrame.merge

        C = pd.merge(B, A, on=['Smiles'])
        C
            ID  Smiles
        0   24  Smile1
        1   85  Smile4
        2  102  Smile6
        

        或者isinreset_index会是

        C = B[B.Smiles.isin(A.Smiles)].reset_index(drop=True)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-08-16
          • 1970-01-01
          • 1970-01-01
          • 2017-07-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多