如何向 Pandas DataFrame 添加插值?

问题描述

我有以下名为 pandasdf DataFrame:

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 以适应 timestampdf 的粒度。

预期结果(请注意,我随机插入了 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