Python 基于数据框中的一列将数据框特定列合并在一起

Python 基于数据框中的一列将数据框特定列合并在一起,python,pandas,Python,Pandas,假设我有以下两个数据帧: import pandas as pd df1 = pd.DataFrame({'ID': ['01', '02', '03', '04', '05', '06'], 'Name':['Jack','Sue', pd.np.nan,'Bob','Alice','John'], 'City':['Seattle','SF','LA','OC', pd.np.nan, pd.np.nan], 'A': [1, 2.1, pd.np.nan, 4.7

假设我有以下两个数据帧:

import pandas as pd

df1 = pd.DataFrame({'ID': ['01', '02', '03', '04', '05', '06'],
    'Name':['Jack','Sue', pd.np.nan,'Bob','Alice','John'],
    'City':['Seattle','SF','LA','OC', pd.np.nan, pd.np.nan],
    'A': [1, 2.1, pd.np.nan, 4.7, 5.6, 6.8],
    'B': [.25, pd.np.nan, pd.np.nan, 4, 12.2, 14.4]})

df2 = pd.DataFrame({'id': ['03', '05', '06', '07', '08', '09'],
    'Name':['Mery',pd.np.nan, pd.np.nan,'Bill','Alice','John'],
    'City':['NY','DC','LA','DC', 'LA', pd.np.nan],
    'A': [1, 5.6, 6.8, 4.7, 5.6, 6.8],
    'C': [0.5, pd.np.nan, pd.np.nan, 5, 3.7, 6.8],
    'Num_children':[2,0,0,3,2,1],
    'Num_pets':[5,1,0,5,2,2]})
我想使用
df1
中的
id
df2
中的
id
'id'
作为键,将
df2
中的
'id'
列从
df2
更新到
df1
,这是我想要的预期输出:

     ID   Name     City    A      B    C      Num_children 
0   01   Jack  Seattle  1.0   0.25  NaN           NaN  
1   02    Sue       SF  2.1    NaN  NaN           NaN     
2   03   Mery       LA  1.0    NaN  0.5           2.0     
3   04    Bob       OC  4.7   4.00  NaN           NaN     
4   05  Alice       DC  5.6  12.20  NaN           0.0   
5   06   John       LA  6.8  14.40  NaN           0.0    
6   07   Bill       DC  4.7    NaN  5.0           3.0     
7   08  Alice       LA  5.6    NaN  3.7           2.0     
8   09   John      NaN  6.8    NaN  6.8           1.0     
我的实际产出:

#cols_to_use = df2.columns.difference(df1.columns)
cols_to_use = ['id', 'Name', 'City', 'A', 'C', 'Num_children']
df = pd.merge(df1, df2[cols_to_use], left_on = 'ID', right_on = 'id', how='outer')
print(df)

    ID Name_x   City_x  A_x      B   id Name_y City_y  A_y    C  Num_children
0   01   Jack  Seattle  1.0   0.25  NaN    NaN    NaN  NaN  NaN           NaN
1   02    Sue       SF  2.1    NaN  NaN    NaN    NaN  NaN  NaN           NaN
2   03    NaN       LA  NaN    NaN   03   Mery     NY  1.0  0.5           2.0
3   04    Bob       OC  4.7   4.00  NaN    NaN    NaN  NaN  NaN           NaN
4   05  Alice      NaN  5.6  12.20   05    NaN     DC  5.6  NaN           0.0
5   06   John      NaN  6.8  14.40   06    NaN     LA  6.8  NaN           0.0
6  NaN    NaN      NaN  NaN    NaN   07   Bill     DC  4.7  5.0           3.0
7  NaN    NaN      NaN  NaN    NaN   08  Alice     LA  5.6  3.7           2.0
8  NaN    NaN      NaN  NaN    NaN   09   John    NaN  6.8  6.8           1.0
如何正确地合并它们?谢谢

与一起使用,最后通过与获取新索引名:


谢谢还有一个问题,对于相同的id,如果
df1
df2
中的一个单元格都有值(可能相同或不同),在合并到final
df
后,它将用
df2
替换
df1
中的值,对吗?@ahbon-hmmm,我认为您可以用df1合并来自df2的不丢失或不存在的数据,所以如果两者都存在值,df2应该是final。好的,知道了。谢谢。:)
cols_to_use = ['id', 'Name', 'City', 'A', 'C', 'Num_children']
df = (df2[cols_to_use].set_index('id')
                      .combine_first(df1.set_index('ID'))
                      .rename_axis('ID')
                      .reset_index())
print (df)
   ID    A      B    C     City   Name  Num_children
0  01  1.0   0.25  NaN  Seattle   Jack           NaN
1  02  2.1    NaN  NaN       SF    Sue           NaN
2  03  1.0    NaN  0.5       NY   Mery           2.0
3  04  4.7   4.00  NaN       OC    Bob           NaN
4  05  5.6  12.20  NaN       DC  Alice           0.0
5  06  6.8  14.40  NaN       LA   John           0.0
6  07  4.7    NaN  5.0       DC   Bill           3.0
7  08  5.6    NaN  3.7       LA  Alice           2.0
8  09  6.8    NaN  6.8      NaN   John           1.0