我有一个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


我尝试将lambda与apply一起使用,但是在缺少其中一个数据时遇到问题。

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

关于python - 想要通过平均其他传感器来代替NaN,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57645418/

10-12 16:43