Pandas - 合并两个具有相同列名称的DataFrame

时间:2014-08-05 17:56:03

标签: python pandas merge dataframe

我在第一列中有两个具有相同列名和相同ID的数据框。除了ID列之外,在一个DataFrame中包含值的每个单元格在另一个DataFrame中包含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 个答案:

答案 0 :(得分:3)

您可能需要 df.update 。请参阅documentation

df1.update(df2, raise_conflict=True)

答案 1 :(得分:2)

在这种情况下, combine_first 功能是合适的。 (http://pandas.pydata.org/pandas-docs/version/0.13.1/merging.html

顾名思义,combine_first接受第一个DataFrame,并使用第二个值在第一个数据框中找到NaN值。

所以:

df3 = df1.combine_first(df2)

生成一个新的DataFrame,df3,它基本上只是df1,只要有可能就填充df2的值。

答案 2 :(得分:0)

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

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