仅当连续24个或更多NAN时才填充NAN值

时间:2019-10-24 19:59:33

标签: python pandas

我有一个非常大的数据框,我试图用非Nan值之前和之后的平均值填补某些特定值的空白。事情是这样的:我有很多空白,所以我只想对不超过24个连续空白的行应用此规则。如果> 24(也有很多),我想保持原样。

首先,我尝试了这一点:

df = df.interpolate(limit=24)

但是它不能按照我想要的方式工作。例如,如果我有34个nan连续值,则此代码将一直填充到第24个元素,而其余10个保持不变。

还尝试:

df["speed"] = df["speed"].transform(lambda x: x.fillna((df["speed"].ffill()+df["speed"].bfill())/2, limit=24))

它也不起作用。甚至只有1或2个连续的NaN尚未被替换。非常感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

让我们尝试一下:

s = df['speed']
s.interpolate()\
 .mask((s.groupby(s.notna().cumsum()).transform('size') - 1).where(s.isna()) > 24)