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

2024-04-27 18:49:24 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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


Tags: 数据id示例onmergenanpd外观
3条回答

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

顾名思义,combineúfirst获取第一个数据帧,并将第二个数据帧中的值添加到第一个数据帧中找到NaN值的任何位置。

所以:

df3 = df1.combine_first(df2)

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

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

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

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

df1.update(df2, raise_conflict=True)

相关问题 更多 >