以下代码根据一些条件考虑移动平均线。如果行中的日期小于指定的日期(开始日期),则它将返回该列的当前值。一切都很酷,但是运行缓慢(我有> 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,
)
有人为我提供了Rolling_mean的用法,但我不知道如何在条件下执行此操作。 示例数据:
DATE_G ID1_G ID_C_T RES RES1_1Y
03.06.2019 35802 1 1
04.06.2019 13592 2 0
05.06.2019 28267 2 0
06.06.2019 36327 1 0
07.06.2019 28267 1 0
08.06.2019 78317 1 0
09.06.2019 13101 2 0
10.06.2019 28267 2 1 0
11.06.2019 46752 2 0
12.06.2019 36320 1 1
13.06.2019 28108 2 0
14.06.2019 72815 1 1
15.06.2019 31819 1 0
16.06.2019 28267 2 0 0.5
17.06.2019 14953 1 0
18.06.2019 23381 1 0
19.06.2019 29260 1 1
20.06.2019 35498 1 0
21.06.2019 28267 2 0 0.333333333
22.06.2019 5058 2 0
23.06.2019 4003 5 0