熊猫限制重采样/窗口替换多行值

时间:2021-04-09 20:53:41

标签: python pandas pandas-resample

我正在处理光伏组件的天气数据。我得到的辐照度数据集(常规时间序列,1 秒数据)显示了该领域中经常出现的一个问题:偶尔,当不应该(白天)出现零值时,例如由于仪器或数据写入错误。

我过去有效的解决方案如下:

df['PoA_corr'] = df['PoA'].replace(0,np.nan).resample('1s').mean().interpolate(method='linear',axis=0).ffill().bfill()

where PoA:原创,有问题,PoA_corr,我试图纠正错误。

但是,从下图可以看出,并非所有错误点都得到了适当的纠正:问题在于 PoA == 0 的前后有 1-4 个点,不正确(即数据中的“V”形,一个点==0需要用前后“V”点之间的插值线替换)。

Forward fill issue

我有一些想法,但我不知道哪个是最好的,哪个是最 Pythonic 的(或能够做到的)。

  1. 获取索引列表,其中PoA == 0,查看上面3秒(行),然后替换6-8秒(=6-8行)的数据。我设法使用 between_time 找到白天的点列表,然后使用 timedelta 找到上面的点,但我不知道如何替换/覆盖随后的 6-8行(或在点“X-4”和“X+4”之间插入,其中 X 是 PoA == 0 所在的位置。df 很大(2.3 GB),所以我不愿意使用一个 for 循环。目前,我在白天发现 PoA == 0 的日期时间列表为:

    df.between_time('09:00','16:00').loc[df['PoA']==0]['datetime']
    
  2. 对数据进行某种形式的移动窗口,以便如果窗口内的任何值 == 0,则 => 在窗口的第一个和最后一个值之间进行插值。在这里,我对如何做到这一点感到困惑。

是否可以在 Pandas 中找到解决方案,还是建议使用 numpy 或纯 python?

0 个答案:

没有答案
相关问题