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
定义自己的插值函数。假设您有这个数据框,其中客户 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
。
我正在对索引不连续的序列进行一些 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
定义自己的插值函数。假设您有这个数据框,其中客户 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
。