【问题标题】:How to merge two columns from different dataframes with conditions如何使用条件合并来自不同数据框的两列
【发布时间】:2023-03-05 02:46:01
【问题描述】:

我有两个数据框(first_df 和 second_df),我想合并它们,新数据框将 first_df 的 ID 放在一列中,将 second_df 的 ID 放在第二列中,将相同的 ID 放入将同一行和不常见的 ID 放在 Na 或 None 值旁边的相应列中。

first = pd.DataFrame({"id": ["K0", "K1" ], "v": [1, 2]})

    id  v
0   K0  1
1   K1  2

second = pd.DataFrame({"id": ["K0", "K3", "K2"], "v": [4, 6,3]})
    id  v
0   K0  4
1   K3  6
2   K2  3


理想的输出

  id_1  id_2
0   K0  K0
1   K1  Na
2   Na  K2

【问题讨论】:

    标签: python pandas merge


    【解决方案1】:

    IIUC 使用外连接创建新的id 列:

    df1 = first.assign(id_1 = first.id)[['id', 'id_1']]
    df2 = second.assign(id_2 = second.id)[['id', 'id_2']]
    
    df = df1.merge(df2, on='id', how='outer').drop('id', axis=1)
    

    或者:

    df1 = first.set_index('id', drop=False)[['id']].add_suffix('_1')
    df2 = second.set_index('id', drop=False)[['id']].add_suffix('_2')
    
    df = pd.concat([df1, df2], axis=1).reset_index(drop=True)
    print (df)
      id_1 id_2
    0   K0   K0
    1   K1  NaN
    2  NaN   K3
    3  NaN   K2
    

    【讨论】:

      【解决方案2】:
      import pandas as pd
      data1 = {'Name':['Jai', 'Princi', 'Gaurav', 'Anuj'], 
              'Age':[27, 24, 22, 32], 
              'Address':['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj'], 
              'Qualification':['Msc', 'MA', 'MCA', 'Phd']} 
      
      
      data2 = {'Name':['Abhi', 'Ayushi', 'Dhiraj', 'Hitesh'], 
              'Age':[17, 14, 12, 52], 
              'Address':['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj'], 
              'Qualification':['Btech', 'B.A', 'Bcom', 'B.hons']} 
      
      
      df = pd.DataFrame(data1,index=[0, 1, 2, 3])
      df1 = pd.DataFrame(data2, index=[4, 5, 6, 7])
      
      print(df, "\n\n", df1) 
      

      【讨论】:

      • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 2012-02-04
      • 2019-06-09
      • 2020-10-20
      • 2019-09-18
      • 2016-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多