我想使用'mean'和'interpolate'在df中填充NaN,具体取决于NaN发生的当天 . 如下所示,第一个NaN发生在早上6点,第二个NaN发生在上午8点 .
02/03/2016 05:00 8
02/03/2016 06:00 NaN
02/03/2016 07:00 1
02/03/2016 08:00 NaN
02/03/2016 09:00 3
我的df包含数千天 . 我希望在早上7点之前对任何NaN应用'ffill',并对早上7点之后发生的那些应用'interpolate' . 我的数据是从早上6点到下午6点 .
我的尝试是:
df_imputed = (df.between_time("00:00:00", "07:00:00", include_start=True, include_end=False)).ffill()
df_imputed = (df.between_time("07:00:00", "18:00:00", include_start=True, include_end=True)).interpolate()
但它将我的df降低到指定的时间段,而不是按我的意愿填充NaN .
编辑:我的df包含大约400列,因此该过程将适用于所有列 .
1 回答
原始问题:单一系列的 Value 观
您可以根据条件定义布尔系列,然后根据numpy.where适当地定义interpolate或ffill:
更新的问题:多个值系列
使用多个值列,您可以使用pd.DataFrame.where和iloc调整上述解决方案 . 或者,您可以使用loc或其他方式(例如filter)来选择列,而不是
iloc
: