合并数据框时有条件地填充NaN值

时间:2020-05-13 14:04:53

标签: python pandas dataframe

我有两个要与两个共享列(SymbolDate)共享的数据框:

df1

  Company Symbol   ID        Date  Price
0   A Inc     AA  123  2019-03-31    1.0
1   A Inc     AA  123  2019-06-30    NaN
2   A Inc     AA  123  2019-09-30    3.0
3   B Inc     BB  456  2019-03-31    5.0
4   B Inc     BB  456  2019-06-30    6.0
5   B Inc     BB  456  2019-09-30    7.0
6   X Inc     XX  999  2019-03-31    9.0

df2

  Symbol        Date  Price  Income
0     AA  2019-03-31    1.1      10
1     AA  2019-06-30    2.1      11
2     AA  2019-09-30    3.1      12
3     BB  2019-03-31    5.1      14
4     BB  2019-06-30    6.1      15
5     BB  2019-09-30    7.1      16
6     ZZ  2019-03-31    8.0      20

如果Pricedf1中存在df2,那么我想使用df1中的那个;但是,在df1中不存在的情况下,我想使用df2中的那个,以便输出如下:

 Company Symbol     ID        Date   Price  Income
0   A Inc     AA  123.0  2019-03-31    1.0    10.0
1   A Inc     AA  123.0  2019-06-30    2.1    11.0
2   A Inc     AA  123.0  2019-09-30    3.0    12.0
3   B Inc     BB  456.0  2019-03-31    5.0    14.0
4   B Inc     BB  456.0  2019-06-30    6.0    15.0
5   B Inc     BB  456.0  2019-09-30    7.0    16.0
6   X Inc     XX  999.0  2019-03-31    9.0     NaN
7     NaN     ZZ    NaN  2019-03-31    8.0    20.0

df3 = pd.merge(df1, df2, on=['Date', 'Symbol'], how='outer')让我接近,但是在删除NaN之前,如何用Price_x列中的值替换Price_y中的Price_y值?

1 个答案:

答案 0 :(得分:1)

您可以在merge

之后进行修复
df3 = pd.merge(df1, df2, on=['Date', 'Symbol'], how='outer')
df3['Price']=df3.Price_x.fillna(df3.Price_y)
df3=df3.drop(['Price_x','Price_y'],axis=1)