Pandas concate 2个数据帧,具有第一个键,而不是另一个键

Pandas concate 2个数据帧,具有第一个键,而不是另一个键,pandas,numpy,Pandas,Numpy,我有两个数据帧 raw_data = { 'subject_id': ['1', '2', '3', '4', '5'], 'first_name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 'last_name': ['Anderson', 'Ackerman', 'Ali', 'Aoni', 'Atiches']} df_a = pd.DataFrame(raw_data, columns =

我有两个数据帧

raw_data = {
        'subject_id': ['1', '2', '3', '4', '5'],
        'first_name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 
        'last_name': ['Anderson', 'Ackerman', 'Ali', 'Aoni', 'Atiches']}
df_a = pd.DataFrame(raw_data, columns = ['subject_id', 'first_name', 'last_name'])
df_a

我希望输出如下

 subject_id first_name last_name
0          1       Alex  Anderson
1          2        Amy  Ackerman
2          3      Allen       Ali
3          4      Alice      Aoni
4          5     Ayoung   Atiches
2          6       Bran   Balwner
3          7      Bryce     Brice
4          8      Betty    Btisan
我想连接df_a的所有记录,并且只连接df_b中不在df_a中的那些记录

我能做到这一点,通过下面的代码

    import pandas as pd
    import numpy as np

mask=np.logical_not(df_b['subject_id'].isin(df_a['subject_id']))
    pd.concat([df_a,df_b.loc[mask]])
在函数concat和merge中是否有其他直接可用的简短方法。
请帮助..

删除重复项
保留第一对重复项的默认值

pd.concat([df_a,df_b]).drop_duplicates(['subject_id'])
Out[1015]: 
  subject_id first_name last_name
0          1       Alex  Anderson
1          2        Amy  Ackerman
2          3      Allen       Ali
3          4      Alice      Aoni
4          5     Ayoung   Atiches
2          6       Bran   Balwner
3          7      Bryce     Brice
4          8      Betty    Btisan

可以将combine_first与set_index()一起使用

pd.concat([df_a,df_b])。删除重复项()
pd.concat([df_a,df_b]).drop_duplicates(['subject_id'])
Out[1015]: 
  subject_id first_name last_name
0          1       Alex  Anderson
1          2        Amy  Ackerman
2          3      Allen       Ali
3          4      Alice      Aoni
4          5     Ayoung   Atiches
2          6       Bran   Balwner
3          7      Bryce     Brice
4          8      Betty    Btisan
new_df = df_a.set_index('subject_id').combine_first(df_b.set_index('subject_id'))\
.reset_index()

    subject_id  first_name  last_name
0   1           Alex        Anderson
1   2           Amy         Ackerman
2   3           Allen       Ali
3   4           Alice       Aoni
4   5           Ayoung      Atiches
5   6           Bran        Balwner
6   7           Bryce       Brice
7   8           Betty       Btisan