我在第一列中有两个具有相同列名和相同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中的值合并为一个?
答案 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)]