Python pd.merge_asof与聚合

Python pd.merge_asof与聚合,python,pandas,time-series,Python,Pandas,Time Series,给定一个具有新时间段(新班次)开始时间的数据帧,将下一个时间段(班次)之前发生的所有销售相加 所以pd.merge\u asof做了我想要的,除了它只做1:1的合并。最好是获得一个多索引数据帧,其中索引[0]是检查点,索引[1]是销售行,这样我可以在之后自由聚合。最后的办法是一个丑陋的O(n)环 每个df中的行数为数百万。 有什么想法吗?你可以使用pd.cut 例如,如果你想按范围分组,你可以这样使用。 正如您所知,我添加了24以显示范围的完成情况 pd.cut(df_sales["t

给定一个具有新时间段(新班次)开始时间的数据帧,将下一个时间段(班次)之前发生的所有销售相加

所以pd.merge\u asof做了我想要的,除了它只做1:1的合并。最好是获得一个多索引数据帧,其中索引[0]是检查点,索引[1]是销售行,这样我可以在之后自由聚合。最后的办法是一个丑陋的O(n)环

每个df中的行数为数百万。
有什么想法吗?

你可以使用
pd.cut

例如,如果你想按范围分组,你可以这样使用。 正如您所知,我添加了24以显示范围的完成情况

pd.cut(df_sales["time"], [1,5,10,24])
如果要自动执行此操作,可以使用以下方法:

获取您的检查点,添加24个完成时间,分组,合计销售额,重置concat的索引

group_and_sum = df_sales.groupby(pd.cut(df_sales["time"], df_checkpoints['time'].append(pd.Series(24))),as_index = False).sum().drop('time',axis=1)
名称的concat 2数据帧

pd.concat([group_and_sum,df_checkpoints],axis=1)
输出

soldCount   time    shift
0   1   1   Adam
1   9   5   Ben
2   5   10  Carl

这是一个奇迹,但不幸的是,使用500k行时,由于实现速度慢,使用pd.cut运行需要几分钟。我最终实现了对pd.cut的替换,并添加了在中运行的numba.njit
soldCount   time    shift
0   1   1   Adam
1   9   5   Ben
2   5   10  Carl