Python:在匹配不同列中的值后,用另一个数据帧中的值替换特定列中的NaN
假设我有df1:Python:在匹配不同列中的值后,用另一个数据帧中的值替换特定列中的NaN,python,pandas,dataframe,match,nan,Python,Pandas,Dataframe,Match,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
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)
印刷品:
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
另一种选择是
map
df1['temp'].fillna(df1['hour'].map(df2.set_index('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