【问题标题】:Find which rows of a dataframe exist in another dataframe查找数据帧的哪些行存在于另一个数据帧中
【发布时间】:2020-06-15 20:51:16
【问题描述】:

我想使用 df1 对 df2 执行查找,以查看 df1 中每一行的列组合是否存在于 df2 中并返回一个布尔值。那可能吗?谢谢!

df1:

**First**     **Last**
Bob          Anza
Jim          Roberts
Tom          Phillips

df2:

**First**     **Last**
Bob          Phillips
Jim          Roberts
Tom          Anza

返回:

df3:

**First**     **Last**  **Match**
Bob          Anza          False
Jim          Roberts       True
Tom          Phillips      False

【问题讨论】:

    标签: python pandas dataframe boolean


    【解决方案1】:

    试试这个:

    df3 = df1.merge(df2, on=['First'])
    df3['match'] = df3['Last_x']==df3['Last_y']
    print(df3)
    
      First    Last_x    Last_y  match
    0   Bob      Anza  Phillips  False
    1   Jim   Roberts   Roberts   True
    2   Tom  Phillips      Anza  False
    

    【讨论】:

      【解决方案2】:

      我假设在您的示例数据中,相应相等行的行位置匹配是巧合。

      您可以通过以下方式构造'Match' 列:

      df1['Match'] = df1.index.isin(df1.reset_index().merge(df2)['index'])
      

      默认情况下DataFrame.merge 使用列标签的交集进行合并,因此上面的行相当于:

      df1['Match'] = df1.index.isin(df1.reset_index().merge(df2, on=['First', 'Last'])['index'])
      

      在您只想比较“部分行”是否相等的类似问题中,请显式提供onleft_onright_on 参数。

      【讨论】:

        【解决方案3】:

        试试这个:

        df3 = df1.copy()
        df3['**Match**'] = (df1 == df2).all(axis=1)
        print(df3)
        

        输出:

          **First**  **Last**  **Match**
        0       Bob      Anza      False
        1       Jim   Roberts       True
        2       Tom  Phillips      False
        

        请注意,这还会检查df1df2 第一列中的值是否相等。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-08-18
          • 2017-11-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-11-28
          • 2018-01-10
          相关资源
          最近更新 更多