我有一个非常大的数据框,我试图用非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尚未被替换。非常感谢您的帮助!
答案 0 :(得分:2)
让我们尝试一下:
s = df['speed']
s.interpolate()\
.mask((s.groupby(s.notna().cumsum()).transform('size') - 1).where(s.isna()) > 24)