首页 > 解决方案 > 熊猫插值保持原始索引

问题描述

我在索引不连续的系列中做一些熊猫插值。所以它可以是这样的:

     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' (我正在测试两者。用于不同的目的)。

如果可能的话,我如何进行插值并将原始索引保留在列或索引中,以便我可以与其他数据帧连接?

标签: pythonpandasinterpolation

解决方案


您可以使用 定义自己的插值函数np.polyfit。假设您有这个客户A开始的数据框na

    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

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


推荐阅读