我找不到一种正确命名应用于滚动窗口的自定义聚合函数的方法。这个回答解释了对于groupby
聚合的内容很好。我尝试使用pd.NamedAggregates
,就像这样
df
.rolling(f"{num_days_window + 1}D", min_periods=day_length)
.aggregate(time_mean=pd.NamedAgg(column="time", aggfunc=lambda w: window_daily_stats(w, np.mean)),
time_std=pd.NamedAgg(column="time", aggfunc=lambda w: window_daily_stats(w, np.std)))
嵌套字典的命名已经被弃用,所以那不是一个选项。传入元组也不起作用。
.rolling(f"{num_days_window + 1}D", min_periods=day_length)
.aggregate(time_mean=("time", lambda w: window_daily_stats(w, np.mean)),
time_std=("time", lambda w: window_daily_stats(w, np.std)))
两种情况下的错误都是一样的:
TypeError: aggregate() missing 1 required positional argument: 'func'
我目前的做法是将一个包含“列: 函数列表”的字典传递给聚合函数,但在该情况下,生成的列将被命名。
('time', '<lambda>'),
('time', '<lambda>'),
不幸的是,这并没有为列提供唯一值的索引对象。
总之我的问题是,如何为滚动窗口创建自定义函数的命名聚合?
df[['time_mean', 'time_std']] = df.time.rolling(...).agg(['mean', 'std']])
对于滚动聚合,命名聚合不起作用。 - Emmadf[['time_mean', 'time_std']] = df.time.rolling(...).agg([lambda w: window_daily_stats(w, np.mean), lambda w: window_daily_stats(w, np.std)])
。你可以在列表中传递函数或函数名称(字符串)。 - Emma