Объединение двух кадров данных в Pandas на основе разницы во времени - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть эти два кадра данных, df1, df2.

df1:

dateTime                 userId  session

2018-08-30 02:20:19      2233      1
2018-08-30 05:32:10      1933      1
2018-08-30 09:10:39      2233      2
2018-08-30 10:26:59      2233      3
2018-08-30 11:56:25      4459      1
2018-08-30 12:30:55      4459      1

df2:

clickTime                 userId  session  clickId

2018-08-30 02:21:09      2233               1987
2018-08-30 02:23:19      2233               1988
2018-08-30 02:24:00      2233               1989
2018-08-30 02:32:09      2233               1990
2018-08-30 05:33:10      1933               2009
2018-08-30 05:35:19      1933               2010
2018-08-30 05:36:59      1933               2011
2018-08-30 11:57:25      4459               3012
2018-08-30 11:58:55      4459               3013

Я хочу объединить два кадра данных в userId, а также столбцы временного диапазона, которые находятся в диапазоне, скажем, 10 минут. df1.

Итак, мой фрейм данных, который я хочу, выглядит примерно так:

  dateTime               userId  session   clickTime             clickId

2018-08-30 02:20:19      2233      1       2018-08-30 02:21:09    1987
2018-08-30 02:20:19      2233      1       2018-08-30 02:23:19    1988
2018-08-30 02:20:19      2233      1       2018-08-30 02:21:09    1989
2018-08-30 02:20:19      2233      1       2018-08-30 02:21:09    1990

Итак, я хочу, чтобы они были для каждого пользователя, датафрейм должен выглядеть следующим образом, для каждого userId Я хочу этот кадр данных. Является ли это возможным?

Так что я хочу объединить df1 и df2 на userId, а также clickTime из df2 должно лежать с диапазоном времени, скажем, 10-15 минут из dateTime столбца df1.

1 Ответ

0 голосов
/ 07 сентября 2018

IIUC: Используйте pandas.merge_asof

pd.merge_asof(
    df1, df2,
    left_on='dateTime',
    right_on='clickTime',
    by='userId',
    direction='nearest'
)

             dateTime  userId  session           clickTime  clickId
0 2018-08-30 02:20:19    2233        1 2018-08-30 02:21:09     1987
1 2018-08-30 05:32:10    1933        1 2018-08-30 05:33:10     2009
2 2018-08-30 09:10:39    2233        2 2018-08-30 02:32:09     1990
3 2018-08-30 10:26:59    2233        3 2018-08-30 02:32:09     1990
4 2018-08-30 11:56:25    4459        1 2018-08-30 11:57:25     3012
5 2018-08-30 12:30:55    4459        1 2018-08-30 11:58:55     3013

Вы можете указать допуск на то, как далеко выглядишь

pd.merge_asof(
    df1, df2,
    left_on='dateTime',
    right_on='clickTime',
    by='userId',
    direction='nearest',
    tolerance=pd.Timedelta(15, unit='m')
)

             dateTime  userId  session           clickTime  clickId
0 2018-08-30 02:20:19    2233        1 2018-08-30 02:21:09   1987.0
1 2018-08-30 05:32:10    1933        1 2018-08-30 05:33:10   2009.0
2 2018-08-30 09:10:39    2233        2                 NaT      NaN
3 2018-08-30 10:26:59    2233        3                 NaT      NaN
4 2018-08-30 11:56:25    4459        1 2018-08-30 11:57:25   3012.0
5 2018-08-30 12:30:55    4459        1                 NaT      NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...