python - 使用额外共享变量加入和过滤两个重叠 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)都占用了我脚本运行时间的很大一部分。
有没有更有效的方法来做到这一点?
解决方案
推荐阅读
- django - ImageField 默认 upload_to 目录变化
- visual-studio - 如何使用 PIX 调试着色器
- c++ - WM_SETFOCUS 消息和 NULL wParam
- elasticsearch - 在 ElasticSearch 中为多词同义词添加排除项
- javascript - 如何从字符串创建单独的 android 键码
- azure - 如何更改 Azure 监控操作组管理员地址
- python - 根据上下文更改底图大小
- python - Google Cloud Storage - Python 按日期检查文件(解压缩 gz 文件)
- angular - setTimeout 在 for 循环内发送通知
- svg - Lilypond SVG 导出 - 如何为所有图形对象添加类?