如何解决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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。