我正在按索引不连续的序列进行一些熊猫插值。所以可能是这样:
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))
插值方法为“立方”或“索引”的地方(出于不同的目的,我正在同时测试两者)。
如何进行插值并将原始索引以某种方式保留在列或索引中(如果可能),以便可以与其他数据帧连接?
答案 0 :(得分:1)
您可以使用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
这假设每个客户至少有2个有效的Value
。