如何将插值添加到 pandas DataFrame?

How to add interpolated values to pandas DataFrame?

我有以下 pandas DataFrame 称为 df:

timestamp   param_1     param_2
0.000       -0.027655   0.0
0.25        -0.034012   0.0
0.50        -0.040369   0.0
0.75        -0.046725   0.0
1.00        -0.050023   0.0
1.25        -0.011015   0.0
1.50        -0.041366   0.0
1.75        -0.056723   0.0
2.00        -0.013081   0.0

现在我需要添加从以下列表创建的两个新列:

timestamp_new = [0.5, 1.0, 1.5, 2.0]
param_3 = [10.0, 25.0, 15.0, 22.0]

问题是 timestamp_new 具有不同的粒度。因此,我需要对 timestamp_newparam_3 进行(线性)插值,以适应 df.

timestamp 的粒度

预期结果(请注意,我随机插入 param_3 值只是为了显示预期结果的格式):

timestamp   param_1     param_2   param_3
0.000       -0.027655   0.0       8.0
0.25        -0.034012   0.0       9.0
0.50        -0.040369   0.0       10.0
0.75        -0.046725   0.0       20.0
1.00        -0.050023   0.0       25.0
1.25        -0.011015   0.0       18.0
1.50        -0.041366   0.0       15.0
1.75        -0.056723   0.0       17.0
2.00        -0.013081   0.0       22.0

有什么办法吗?

让我们试试reindex().interpolate:

ref_df = pd.Series(param_3, index=timestamp_new)
new_vals = (ref_df.reindex(df['timestamp'])
                  .interpolate('index')
                  .bfill()                            # fill the first few nans
                  .ffill()                            # fill the last few nans
           )

df['param_3'] = df['timestamp'].map(new_vals)

输出:

   timestamp   param_1  param_2  param_3
0       0.00 -0.027655      0.0     10.0
1       0.25 -0.034012      0.0     10.0
2       0.50 -0.040369      0.0     10.0
3       0.75 -0.046725      0.0     17.5
4       1.00 -0.050023      0.0     25.0
5       1.25 -0.011015      0.0     20.0
6       1.50 -0.041366      0.0     15.0
7       1.75 -0.056723      0.0     18.5
8       2.00 -0.013081      0.0     22.0