wukan1986/expr_codegen

部分groupby可以合并,这样能再提速

wukan1986 opened this issue · 1 comments

df = df.sort_values(by=["asset", "date"]).groupby(by=["asset"], group_keys=False).apply(func_0_ts__asset__date)
df = df.groupby(by=["date"], group_keys=False).apply(func_0_cs__date)
df = func_0_cl(df)
df = df.groupby(by=["date"], group_keys=False).apply(func_1_cs__date)
df = func_1_cl(df)
df = df.sort_values(by=["asset", "date"]).groupby(by=["asset"], group_keys=False).apply(func_1_ts__asset__date)
df = func_2_cl(df)
df = df.sort_values(by=["asset", "date"]).groupby(by=["asset"], group_keys=False).apply(func_2_ts__asset__date)
df = df.groupby(by=["date"], group_keys=False).apply(func_2_cs__date)
df = df.groupby(by=["date"], group_keys=False).apply(func_3_cs__date)
df = df.sort_values(by=["asset", "date"]).groupby(by=["asset"], group_keys=False).apply(func_3_ts__asset__date)

func_2_cs__date、func_3_cs__date虽然有前后依赖关系,但完全可以放在同一groupby中计算

func_1_ts__asset__date、func_2_ts__asset__date中间隔了func_2_cl,其实三个可以合并

实现了两种合并功能。

  1. 整列算子向前合并。例如func_2_cl向前合并到func_1_ts__asset__date
  2. 首尾接龙合并。例如func_2_cs__date是第2层的尾,func_3_cs__date是第三层的首,他们可以合并