加快移动平均线

时间:2019-06-04 17:52:39

标签: python-3.x pandas dataframe

以下代码根据一些条件考虑移动平均线。如果行中的日期小于指定的日期(开始日期),则它将返回该列的当前值。一切都很酷,但是运行缓慢(我有> 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   

0 个答案:

没有答案