这是一个df:
2005-01-24 117.0
2005-02-22 NaN
2005-03-21 NaN
2005-04-18 114.0
2005-05-23 NaN
2005-06-20 NaN
2005-07-18 122.0
并且预期输出是使得下限值和上限值的平均值填充NaN值,如下所示:
2005-01-24 117.0
2005-02-22 115.5 (117-114 / 2)
2005-03-21 115.5
2005-04-18 114.0
2005-05-23 118.0 (122-114 / 2)
2005-07-18 122.0
据我所知,df.interpolate()不允许你传递函数?我也试过尝试.rolling(2).mean()并重新编制索引但没有成功。
答案 0 :(得分:1)
假设您拥有系列中的数据:
import pandas as pd
import numpy as np
s = pd.Series({'2005-01-24': 117.0,
'2005-02-22': np.nan,
'2005-03-21': np.nan,
'2005-04-18': 114.0,
'2005-05-23': np.nan,
'2005-06-20': np.nan,
'2005-07-18': 122.0})
您可以使用ffill和bfill查找上限和下限,然后取平均值。
s.ffill().add(s.bfill()).div(2)
Out[71]:
2005-01-24 117.0
2005-02-22 115.5
2005-03-21 115.5
2005-04-18 114.0
2005-05-23 118.0
2005-06-20 118.0
2005-07-18 122.0
dtype: float64