用组的滚动平均值填充

问题描述 投票:0回答:1

我有一个带有日期时间的数据框,并且想用 nans 行周围两行的滚动平均值填充缺失值 - 但同时(因此需要 groupby 时间)。不幸的是,下面的方法不起作用。

df = pd.DataFrame({'datetime':['2023-04-20 13:00', '2023-04-21 13:00','2023-04-22 13:00', '2023-04-23 13:00','2023-04-21 14:00', '2023-04-22 14:00', '2023-04-23 14:00'], 'var':[1, 2, np.nan, 3, np.nan, 4, 5]})

df = df.assign(datetime=pd.to_datetime(df.datetime))
df = df.assign(time=df['datetime'].dt.time)

#does not work
df.assign(var=df.groupby('time', sort=False).var.apply(lambda col: col.fillna(col.rolling(window=2, center=2).mean())))

所以我有这个

            datetime    var
0   2023-04-20 13:00    1.0
1   2023-04-21 13:00    2.0
2   2023-04-22 13:00    NaN
3   2023-04-23 13:00    3.0
4   2023-04-21 14:00    NaN
5   2023-04-22 14:00    4.0
6   2023-04-23 14:00    5.0

并且想要这个

            datetime    var
0   2023-04-20 13:00    1.0
1   2023-04-21 13:00    2.0
2   2023-04-22 13:00    2.5
3   2023-04-23 13:00    3.0
4   2023-04-21 14:00    4.0
5   2023-04-22 14:00    4.0
6   2023-04-23 14:00    5.0
python pandas group-by moving-average
1个回答
0
投票

IIUC,您可以将

pd.Series.interpolate
limit_direction='both'

一起使用
df["var"] = df.groupby("time", group_keys=False)["var"].apply(
    pd.Series.interpolate, limit_direction="both"
)
print(df)

打印:

             datetime  var      time
0 2023-04-20 13:00:00  1.0  13:00:00
1 2023-04-21 13:00:00  2.0  13:00:00
2 2023-04-22 13:00:00  2.5  13:00:00
3 2023-04-23 13:00:00  3.0  13:00:00
4 2023-04-21 14:00:00  4.0  14:00:00
5 2023-04-22 14:00:00  4.0  14:00:00
6 2023-04-23 14:00:00  5.0  14:00:00
© www.soinside.com 2019 - 2024. All rights reserved.