Python Pandas-合并具有相同列名的两个数据帧

Python Pandas-合并具有相同列名的两个数据帧,python,pandas,merge,dataframe,Python,Pandas,Merge,Dataframe,我有两个数据帧,第一列中有相同的列名和ID。除了ID列之外,在一个数据帧中包含值的每个单元格在另一个数据帧中都包含NaN。 以下是它们的外观示例: ID Cat1 Cat2 Cat3 1 NaN 75 NaN 2 61 NaN 84 3 NaN NaN NaN ID Cat1 Cat2 Cat3 1 54 NaN 44 2 NaN 38

我有两个数据帧,第一列中有相同的列名和ID。除了ID列之外,在一个数据帧中包含值的每个单元格在另一个数据帧中都包含NaN。 以下是它们的外观示例:

ID    Cat1    Cat2    Cat3
1     NaN     75      NaN
2     61      NaN     84
3     NaN     NaN     NaN


ID    Cat1    Cat2    Cat3
1     54      NaN     44
2     NaN     38     NaN
3     49      50      53
我想将它们合并到一个数据帧中,同时保持相同的列名。因此,结果如下所示:

ID    Cat1    Cat2    Cat3
1     54      75      44
2     61      38      84
3     49      50      53
我试过:

df3 = pd.merge(df1, df2, on='ID', how='outer')

这给了我一个包含两倍多列的数据帧。如何将每个数据帧中的值合并为一个值?

在这种情况下,combine\u first函数是合适的。()

顾名思义,combine_首先获取第一个数据帧,并在第一个数据帧中找到NaN值的地方使用第二个数据帧中的值进行添加

因此:


生成一个新的数据帧df3,它基本上就是df1,只要有可能,就会填充来自df2的值

您可能需要df.update。看


您也可以将df1中的NaN值更改为df2中的非NaN值

df1[pd.isnull(df1)] = df2[~pd.isnull(df2)]
df1.update(df2, raise_conflict=True)
df1[pd.isnull(df1)] = df2[~pd.isnull(df2)]