Python Pandas DF按索引将NaN替换为其他DF中的值



我有两个数据帧,其中索引可以设置为['Date','Name']。我现在想用可以在第二个数据帧中找到的数据(在列中也可以有NaN值(来替换所有公共列的第一个数据帧的NaN。它们看起来像这样:

NaN = np.nan
df1 = pd.DataFrame([
['2020-01-01', 'Foo1', 8, 0.999],
['2020-01-01', 'Bar1', NaN, NaN],
['2020-01-02', 'Foo1', 1, 0.564],
['2020-01-03', 'Foo1', NaN, NaN]],
columns=['Date', 'Name', 'Val1', 'Val2'])
df2 = pd.DataFrame([
['2020-01-01', 'Foo1', 8, 0.999],
['2020-01-01', 'Bar1', 5, 0.6],
['2020-01-02', 'Foo1', 1, 0.564],
['2020-01-03', 'Foo1', NaN, NaN]],
columns=['Date', 'Name', 'Val1', 'Val2'])

我试着用where和replace语句来做这件事,但不幸的是,到目前为止,我既找不到它,也找不到任何有帮助的东西。提前感谢!

尝试使用combine_firstfillna

df1 = df1.set_index(['Date','Name']).combine_first(df2.set_index(['Date','Name'])).reset_index()
df1
Date  Name  Val1   Val2
0  2020-01-01  Foo1   8.0  0.999
1  2020-01-01  Bar1   5.0  0.600
2  2020-01-02  Foo1   1.0  0.564
3  2020-01-03  Foo1   NaN    NaN
df1 = df1.set_index(['Date','Name']).fillna(df2.set_index(['Date','Name'])).reset_index()

最新更新