Python:匹配不同列中的值后,用另一个数据框中的值替换特定列中的 NaN
Python: Replacing NaN in a specific column by values from another dataframe after matching values in a different column
假设我有 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','002','003','003','003'],
'hour' : [12,11,12,13,13,11,12],
'temp' : [np.nan, 16, 18.9, 20, np.nan, np.nan, 17.3],
'angle' : [130,149,128, np.nan, np.nan,97,216]}
df2 = {'hour' : [11,12,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
假设我有 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','002','003','003','003'],
'hour' : [12,11,12,13,13,11,12],
'temp' : [np.nan, 16, 18.9, 20, np.nan, np.nan, 17.3],
'angle' : [130,149,128, np.nan, np.nan,97,216]}
df2 = {'hour' : [11,12,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