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

6

我有两个具有相同列名和第一列相同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

我希望将它们合并成一个DataFrame,同时保持相同的列名。因此,结果应该如下所示:

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')

我得到了一个包含两倍列数的DataFrame。如何将每个DataFrame中的值合并成一个?

3个回答

7
您可能需要使用 df.update。请参阅文档
df1.update(df2, raise_conflict=True)

6
在这种情况下,combine_first函数是合适的。(http://pandas.pydata.org/pandas-docs/version/0.13.1/merging.html
正如其名称所示,combine_first函数将第一个DataFrame与第二个DataFrame中的值相结合,其中第一个DataFrame中有NaN值的位置将用第二个DataFrame中的值替换。
因此:
df3 = df1.combine_first(df2)

产生一个新的数据框df3,它基本上只是df1,尽可能地填充df2中的值。


0

你也可以将df1中的NaN值替换为df2中的非NaN值。

df1[pd.isnull(df1)] = df2[~pd.isnull(df2)]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接