首页 > 解决方案 > 使用额外共享变量加入和过滤两个重叠 DataFrame 的更快方法

问题描述

这个问题是我在这里提出的问题的“续集” 。我有 2 个如下所示的 DataFrame:

df1 =
               Timestamp    CP_ID  Con  Value
0   2018-01-02 07:30:00.000 3107    1   6275.20
1   2018-01-02 07:45:00.000 3107    1   6275.95
2   2018-01-02 08:00:00.000 3107    1   6276.70
3   2018-01-02 08:15:00.000 3107    1   6277.45
4   2018-01-02 08:30:00.000 3107    1   6278.19

df2 =
          dStart                dEnd        CP_ID   Con A_Id
0   2018-03-12 18:58:53 2018-03-12 21:19:33 30554   1   03FC4BA8
1   2018-04-16 17:53:25 2018-04-16 20:22:52 30554   1   03FC4BA8
2   2018-05-10 19:19:47 2018-05-10 21:28:04 30554   1   03FC4BA8
3   2018-05-26 18:03:19 2018-05-26 20:49:23 30553   1   03FC4BA8
4   2018-08-10 18:26:29 2018-08-10 20:57:15 30827   1   03FC4BA8

df2 是来自所有用户的所有会话的列表(每个会话的 dStart/dEnd)。

df1 是用户特定的会话信息(每个会话的时间戳)。

CP_ID 和 Con 指定一个唯一的位置。

A_Id 指定唯一用户。

我想合并这两个表,以便留下给定用户会话的所有信息。正如 Wen-Ben 在我之前的帖子中提出的,我目前的解决方案类似于:

df = pd.merge(df2,df1,how='left',left_on=['CP_ID','Con'], \
                      right_on=['CP_ID','Con'])

df = df.loc[(df.Timestamp>df.dStart)&(df.Timestamp<df.dEnd)]

这完成了任务,但我的问题是它需要相对较长的时间。我需要为成千上万的用户执行此操作,并且这两个步骤(.merge 和 .loc)都占用了我脚本运行时间的很大一部分。

有没有更有效的方法来做到这一点?

标签: pythonpandasmerge

解决方案


推荐阅读