熊猫插值保持原始索引

时间:2019-09-01 17:52:19

标签: python pandas interpolation

我正在按索引不连续的序列进行一些熊猫插值。所以可能是这样:

     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))

插值方法为“立方”或“索引”的地方(出于不同的目的,我正在同时测试两者)。

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

1 个答案:

答案 0 :(得分:1)

您可以使用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