首页 > 解决方案 > 插值连续数

问题描述

基于下面的 Pandas DataFrame,有时间(秒)和心率值。尽管“时间”应该是连续数字,但我们看到了一些缺失值。(1、2、4、5、7、9、10 等)在这种情况下,我应该使用 pandas.DataFrame.interpolate 来获得所需的结果吗?或任何其他实现它的好主意?请注意,原始数据来自 API。我试图在网上寻找任何答案,但没有运气......

原来的:

    time heartrate
    0   97
    3   105
    6   105
    8   111
    11  111
    13  114
    16  115

期望的输出:

time    heartrate
0   97
1   100
2   103
3   105
4   105
5   105
6   105
7   109
8   111
9   111
10  111
11  111
12  113
13  114
14  114
15  114
16  115

标签: pandasdataframe

解决方案


定义time为 index 然后 reindex withpd.RangeIndex以获得连续值并进行插值heartrate

idx = pd.RangeIndex(df.time.min(), df.time.max()+1, name='time')

out = df.set_index('time').reindex(idx)['heartrate'] \
        .interpolate(method='linear') \
        .pipe(np.ceil) \
        .reset_index()

输出:

>>> out
    time  heartrate
0      0       97.0
1      1      100.0
2      2      103.0
3      3      105.0
4      4      105.0
5      5      105.0
6      6      105.0
7      7      108.0
8      8      111.0
9      9      111.0
10    10      111.0
11    11      111.0
12    12      113.0
13    13      114.0
14    14      115.0
15    15      115.0
16    16      115.0

结果是不精确的。您必须调整interpolate 方法以获得所需的结果,但原理是相同的。


推荐阅读