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

Sla*_*ron 4 python merge dataframe pandas

我在第一列中有两个具有相同列名和相同 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
Run Code Online (Sandbox Code Playgroud)

我想将它们合并到一个 DataFrame 中,同时保持相同的列名。所以结果应该是这样的:

ID    Cat1    Cat2    Cat3
1     54      75      44
2     61      38      84
3     49      50      53
Run Code Online (Sandbox Code Playgroud)

我试过:

df3 = pd.merge(df1, df2, on='ID', how='outer')
Run Code Online (Sandbox Code Playgroud)

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

Rog*_*Fan 7

你可能想要df.update。请参阅文档

df1.update(df2, raise_conflict=True)
Run Code Online (Sandbox Code Playgroud)


Sla*_*ron 6

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

顾名思义, combine_first 获取第一个 DataFrame 并将第二个值添加到其中,只要它在第一个中找到 NaN 值。

所以:

df3 = df1.combine_first(df2)
Run Code Online (Sandbox Code Playgroud)

生成一个新的数据帧 df3,它本质上只是 df1,并尽可能填充 df2 中的值。