Pandas 插值保持原始索引

Pandas interpolate keep original index

我正在对索引不连续的序列进行一些 pandas 插值。所以它可以是这样的:

     Value   Customer_id
0.    5          A
1.    np.nan     A
10.   9          A
11.   10         B
12.   np.nan     B
13.   30         B

我正在考虑 customer_id 进行插值(在这种情况下没有区别,但我的数据框在客户的起点或终点有 NaN)

所以我在做

    series = series.groupby('Customer_id').apply(lambda group: group.interpolate(method= interpolation_method))

其中 interpolation_method 是 'cubic' 或 'index'(我正在测试两者。出于不同的目的)。

如何进行插值并将原始索引以某种方式保留在列中或索引中(如果可能)以便我可以与其他数据帧合并?

您可以使用 np.polyfit 定义自己的插值函数。假设您有这个数据框,其中客户 Ana:

开头
    Value Customer_id
0     NaN           A
1     5.0           A
10    9.0           A
11   10.0           B
12    NaN           B
13   30.0           B

使用自定义插值法填充缺失值:

def interpolate(group):
    x = group.dropna()
    params = np.polyfit(x.index, x['Value'], deg=1)
    predicted = np.polyval(params, group.index)

    s = pd.Series(predicted, index=group.index)
    return group['Value'].combine_first(s)

df.groupby('Customer_id').apply(interpolate).to_frame().reset_index(level=0)

结果:

   Customer_id      Value
0            A   4.555556
1            A   5.000000
10           A   9.000000
11           B  10.000000
12           B  20.000000
13           B  30.000000

这假设每个客户至少有 2 个有效 Value