以下代码根据一些条件考虑移动平均线。如果行中的日期小于指定的日期(开始日期),则它将返回该列的当前值。一切都很酷,但是运行缓慢(我有> 200000行),可以加速吗?
startdate = pd.to_datetime('2019-06-02')
df['RES1_1Y'] = df.apply(
lambda x: (df.loc[
(
(df.DATE_G < x.DATE_G)
& (df.DATE_G >= (x.DATE_G + pd.DateOffset(days=-365)))
& (df.ID1_G == x.ID1_G)
& (df.ID_C_T == x.ID_C_T)
),
"RES",
].mean()) if x.DATE_G > startdate else x.RES1_1Y,
axis=1,
)
答案 0 :(得分:0)
签出-https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.rolling.html
Rolling_mean以及其他一些功能在Pandas文档中的移动窗口功能下分组。
如果这不起作用,请告诉我,我可以共享代码。