Python:匹配其他列中的值后,用另一个数据帧中的值替换特定列中的NaN

问题描述

假设我有df1:

    series_id       hour       temp       angle
0   001             12         NaN        130
1   001             11         16         149
2   002             12         18.9       128
3   002             13         20         NaN
4   003             13         NaN        NaN
5   003             11         NaN        97
6   003             12         17.3       216

&df2:

    hour      temp
0   11          17
1   12          15
2   13          16

在这里要做的是用df2中的值替换df1中“ temp”列中的NA值,其中df1中“ hour”列中的值与df2中的相匹配。 df1的期望结果:

    series_id       hour       temp       angle
0   001             12         15         130
1   001             11         16         149
2   002             12         18.9       128
3   002             13         20         NaN
4   003             13         16         NaN
5   003             11         17         97
6   003             12         17.3       216

我是Python的新手,也不熟悉该语言的语法。有什么建议吗?

额外:相当于我想要的R语言

df1$temp <- ifelse(is.na(df1$temp),df2$temp[match(df1$hour,df2$hour)],df1$temp)

这是我用来在Python中创建两个数据框的代码

import pandas as pd
import numpy as np    

df1 = {'series_id' : ['001','001','002','003','003'],'hour' : [12,11,12,13,12],'temp' : [np.nan,16,18.9,20,np.nan,17.3],'angle' : [130,149,128,97,216]}
df2 = {'hour' : [11,13],'temp' : [17,15,16]}
df1 = pd.DataFrame(df1,columns = ['series_id','hour','temp','angle'])
df2 = pd.DataFrame(df2,columns = ['hour','temp'])

解决方法

df1['temp'] = df1['temp'].fillna(pd.merge(df1,df2,on='hour',how='left')['temp_y'])
print(df1)

打印:

  series_id  hour  temp  angle
0       001    12  15.0  130.0
1       001    11  16.0  149.0
2       002    12  18.9  128.0
3       002    13  20.0    NaN
4       003    13  16.0    NaN
5       003    11  17.0   97.0
6       003    12  17.3  216.0