Как отфильтровать данные по метке времени на один день назад - PullRequest
0 голосов
/ 08 июня 2018

Вот мой критерий фильтра (на один день назад), который называется df

customer_id   timestamp
1             2018-06-03 17:56:52
2             2018-06-03 18:42:51

Вот основной набор данных, который называется df2

transaction_id customer_id   timestamp
1              1             2018-06-02 09:56:23
2              1             2018-06-03 02:56:52
3              1             2018-06-03 12:56:52
4              2             2018-06-03 12:40:51
5              2             2018-06-03 18:40:51
6              2             2018-06-03 18:48:50

То, что я хочу, это

transaction_id customer_id   timestamp
2              1             2018-06-03 02:56:52
3              1             2018-06-03 12:56:52
4              2             2018-06-03 12:40:51
5              2             2018-06-03 18:40:51

Это потому, что для customer_id = 1 критерии фильтра должны начинаться с 2018-06-02 17:56:52 до 2018-06-03 17:56:52

и

Это потому, что для customer_id = 2 фильтркритерии должны начинаться с 2018-06-02 18:42:51 до 2018-06-03 18:42:51

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Вы можете создать новое время, а затем проверить, находится ли отметка времени между временем i, e

after = df2['customer_id'].map(df1.set_index('customer_id')['timestamp'])
before = after - pd.Timedelta('1 days')


df2[(df2['timestamp'] > before) & (df2['timestamp'] < after)]

   transaction_id  customer_id           timestamp
1               2            1 2018-06-03 02:56:52
2               3            1 2018-06-03 12:56:52
3               4            2 2018-06-03 12:40:51
4               5            2 2018-06-03 18:40:51
0 голосов
/ 08 июня 2018

Используйте between от Series, созданного map, с другим, вычтенным за один день, фильтруйте по boolean indexing:

s = df2['customer_id'].map(df1.set_index('customer_id')['timestamp'])

df = df2[df2['timestamp'].between(s - pd.Timedelta(1, unit='d'), s)]
print (df)
   transaction_id  customer_id           timestamp
1               2            1 2018-06-03 02:56:52
2               3            1 2018-06-03 12:56:52
3               4            2 2018-06-03 12:40:51
4               5            2 2018-06-03 18:40:51

Деталь :

print (s)
0   2018-06-03 17:56:52
1   2018-06-03 17:56:52
2   2018-06-03 17:56:52
3   2018-06-03 18:42:51
4   2018-06-03 18:42:51
5   2018-06-03 18:42:51
Name: customer_id, dtype: datetime64[ns]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...