防止 pandas 插值外推

Prevent pandas interpolate from extrapolating

我正在尝试插入一些包含 NaN 的数据。我想填写 1-3 个连续的 NaN,但我不知道如何使用 pd.interpolate()

data_chunk = np.array([np.nan, np.nan, np.nan, 4, 5, np.nan, np.nan, np.nan, np.nan, 10, np.nan, np.nan, np.nan, 14])
data_chunk = pd.DataFrame(data_chunk)[0]
print(data_chunk)
print(data_chunk.interpolate(method='linear', limit_direction='both', limit=3, limit_area='inside'))

原始数据:

0      NaN
1      NaN
2      NaN
3      4.0
4      5.0
5      NaN
6      NaN
7      NaN
8      NaN
9     10.0
10     NaN
11     NaN
12     NaN
13    14.0

尝试插值:

0      NaN
1      NaN
2      NaN
3      4.0
4      5.0
5      6.0
6      7.0
7      8.0
8      9.0
9     10.0
10    11.0
11    12.0
12    13.0
13    14.0

预期结果:

0      NaN
1      NaN
2      NaN
3      4.0
4      5.0
5      NaN
6      NaN
7      NaN
8      NaN
9     10.0
10    11.0
11    12.0
12    13.0
13    14.0

任何帮助将不胜感激:)

创建一个布尔掩码以查看哪些 NA-groups 少于 4 个连续的 NA's

mask = (data_chunk.notnull() != data_chunk.shift().notnull()).cumsum().reset_index().groupby(0).transform('count') < 4
如果 mask == True

Select 插值,否则保持原始值。

pd.concat([interpolated[mask.values[:,0] ==True], data_chunk[mask.values[:,0] == False]]).sort_index()