如何使用pd.interpolate仅用一个缺失数据填充间隙

2024-05-13 04:53:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个空气污染的时间序列数据,其中有几个缺失的间隙,如:

Date             AMB_TEMP      CO         PM10       PM2.5
2010-01-01 0         8         10         ...          15
2010-01-01 1         10        15         ...          20
...
2010-01-02 0                   5          ...           
2010-01-02 1                              ...          20
...
2010-01-03 1         4         13         ...          34     

要指定,这里是数据链接:shorturl.at/blBN1

间隙由几个连续或不连续的NAs组成,R-like做了一些有用的统计:

  1. 时间序列长度:87648
  2. 缺少值的数量:746
  3. 缺失值的百分比:0.85%
  4. 间隙数:136
  5. 平均间隙大小:5.485294
  6. 最长NA间隔(连续NAs系列):32
  7. 最常见的间隙大小(连续NA系列的系列):1(出现50次)

通常,如果我使用df.interpolate(limit=1), 缺少多个间隙的间隙也将被插值

所以我想一个更好的方法来插值只有一个缺失的间隙,就是得到间隙id

为此,我将不同大小的间隙分组,并使用以下函数:

    cum = df.notna().cumsum()
    cum[cum.duplicated()]

结果是:

                       PM2.5
2019-01-09 13:00:00     205
2019-01-10 15:00:00     230
2019-01-10 16:00:00     230
2019-01-16 11:00:00     368
2019-01-23 14:00:00     538
                       ... 
2019-12-02 10:00:00    7971
2019-12-10 09:00:00    8161
2019-12-16 15:00:00    8310
2019-12-24 12:00:00    8498
2019-12-31 10:00:00    8663

如何像这样获得每个间隙中第一个缺失值的索引?

                     PM2.5 gap size
2019-01-09 13:00:00     1
2019-01-10 15:00:00     2
2019-01-16 11:00:00     1
2019-01-23 14:00:00     1
                       ... 
2019-12-02 10:00:00     1
2019-12-10 09:00:00     1
2019-12-16 15:00:00     1
2019-12-24 12:00:00     1
2019-12-31 10:00:00     1

但是当我使用cum[cum.duplicated()].groupby(cum[cum.duplicated()]).count()时,索引将丢失

有更好的解决方案吗

或如何逐案插入?

有人能帮我吗


Tags: 数据dfdate时间序列temp插值nas