通过插值变换 pandas 数据框列

transform pandas dataframe column via Interpolation

我想在 df 上应用一维插值,但不确定如何以有效的方式进行。这里是:

In [8]: param
Out[8]: 
             alpha  beta       rho        nu
0.021918  0.544953   0.5 -0.641566  6.549623
0.041096  0.449702   0.5 -0.062046  5.047923
0.060274  0.428459   0.5 -0.045312  3.625387
0.079452  0.424686   0.5 -0.049508  2.790139
0.156164  0.423139   0.5 -0.071106  1.846614
0.232877  0.414887   0.5 -0.040070  1.334070
0.328767  0.415757   0.5 -0.042071  1.109897

我希望新索引(但不介意 reset_index() 如果需要)看起来像这样:

np.array([0.02, 0.04, 0.06, 0.08, 0.1, 0.15, 0.2, 0.25])

因此需要对 alpha、beta、rho、nu 的相应值进行插值。 提出以下仅适用于一列且仅当 x 和 y 具有相同尺寸时:

x = np.array([0.02, 0.04, 0.06, 0.08, 0.1, 0.15, 0.2, 0.25])
y = np.array(param.alpha)
f = interp1d(x, y, kind='cubic', fill_value='extrapolate')
f(x)

感谢任何指向有效解决方案的指示。谢谢

您可以尝试使用 reindexinterpolate 然后使用 loc:

进行索引选择
param.reindex(new_idx.tolist()+param.index.values.tolist())\
     .sort_index()\
     .interpolate(method='cubic')\
     .bfill()\
     .loc[new_idx]

输出:

         alpha  beta       rho        nu
0.02  0.544953   0.5 -0.641566  6.549623
0.04  0.452518   0.5 -0.073585  5.138333
0.06  0.428552   0.5 -0.044739  3.641854
0.08  0.424630   0.5 -0.049244  2.772958
0.10  0.423439   0.5 -0.047119  2.294109
0.15  0.423326   0.5 -0.069473  1.873499
0.20  0.419130   0.5 -0.060861  1.573724
0.25  0.412985   0.5 -0.029573  1.221732