想通过取其他传感器的平均值来替换 NaN

Want to replace NaN by taking average of other sensors

我有一个 df 来自多个传感器的 DateTimeIndex(每小时读数)

Time                   Temp1   Temp2   Temp3  Humidity1 Humidity2 
1/2/2017 13:00          31       23      NA     66        48
1/2/2017 14:00           22      NA      NA      63        43
1/2/2017 15:00           25      25      21      41        39

我想用 Temp1 和 Temp2 的可用数据替换温度传感器 3 (Temp3) 的缺失值。如果 Temp1 和 Temp2 都不为空,我想取一个平均值。如果只有1个可用,我就取那个值。

预期输出:

Time                      Temp3   
1/2/2017 13:00               27     
1/2/2017 14:00               22      
1/2/2017 15:00               21     

我尝试将 apply 与 lambda 一起使用,但是 运行 当其中一个数据丢失时出现问题。

Df['Temp3'] = Df.apply(
    lambda row: (row['Temp1']+row['Temp2'])/2 if np.isnan(row['Temp3']) 
    else row['Temp3'],
    axis=1
)

您可以通过以下方式进行设置:

df.loc[df['Temp3'].isnull(), 'Temp3'] = df.loc[df['Temp3'].isnull(), ['Temp1', 'Temp2']].mean(axis=1)

例如:

>>> df
   Temp1  Temp2  Temp3
0     31   23.0    NaN
1     22    NaN    NaN
2     25   25.0   21.0
>>> df.loc[df['Temp3'].isnull(), 'Temp3'] = df.loc[df['Temp3'].isnull(), ['Temp1', 'Temp2']].mean(axis=1)
>>> df
   Temp1  Temp2  Temp3
0     31   23.0   27.0
1     22    NaN   22.0
2     25   25.0   21.0