Более быстрый метод объединения и фильтрации двух перекрывающихся DataFrame с дополнительной общей переменной - PullRequest
0 голосов
/ 21 февраля 2019

Этот вопрос является "продолжением" к тому, который я задал здесь .У меня есть 2 DataFrames, которые выглядят так:

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 указывает уникального пользователя.

Я хочу объединить эти две таблицы, чтобыосталось со всей информацией для сеансов данного пользователя.Мое текущее решение, предложенное Вен-Беном в моем предыдущем посте, выглядит примерно так:

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) занимают очень большую часть времени выполнения моего скрипта.

Есть ли более эффективный способ сделатьэто

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...