我有两个数据帧,其中索引可以设置为['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_first
或fillna
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()