繁体   English   中英

如果日期在不同日期的 2 天范围内,如何按日期过滤?

[英]How to filter by date if it is within a range of 2 days from a different date?

我有包含两个事件的日期框架。 第一个事件是交易,第二个事件是电子邮件。 每个事件都有一个时间范围。 我必须只显示在交易后 2 天内收到的那些电子邮件。

数据是从 SQL 服务器下载的,但我不知道如何在 SQL 中以这种方式过滤它(或者甚至可能)。

假设你有一个 SQL 表

TABLE EVENTS
   event_id NUMERIC,
   event_type VARCHAR,
   event_time DATETIME

您可以使用以下几行的 SQL 查询来获取满足您要求的所有(transaction, email)对:

SELECT email.event_id, 
       email.event_time, 
       transaction.event_id, 
       transaction.event_time
FROM EVENTS email JOIN
     EVENTS transaction ON 
         (DATEDIFF(day, transaction.event_time, email.event_time) BETWEEN 0 AND 2)

如果您想在pandas执行此操作,则可以应用类似的逻辑。

好的,我会尝试显示答案以帮助其他人。 您需要一个包含两列的模拟表来创建过滤持续时间所需的数据框。

第一的

import pandas as pd
#Create DataFrame containing two events.
df = pd.DataFrame({
    'TransEvent': ['2013-01-01', '2013-01-02', '2013-01-04','2013-01-03'],#transaction
    'EmailEvent': ['2013-01-11', '2013-02-02', '2013-01-06','2013-01-04'] #email
})
df['TransEvent'] = pd.to_datetime(df['TransEvent'], errors='coerce')#convert to Dates
df['EmailEvent'] = pd.to_datetime(df['EmailEvent'], errors='coerce')

df['DurationDays'] =  df.EmailEvent - df.TransEvent
df[['TransEvent','EmailEvent','DurationDays']]

结果

TransEvent  EmailEvent  DurationDays
0   2013-01-01  2013-01-11  10 days
1   2013-01-02  2013-02-02  31 days
2   2013-01-04  2013-01-06  2 days
3   2013-01-03  2013-01-04  1 days

所以我们只对持续时间 <= 2 天的情况感兴趣。

#show only those emails that were received within 2 days of the transaction.
df[df['DurationDays']<= pd.Timedelta(2,'D')]

最终答案

EmailEvent  TransEvent  DurationDays
2   2013-01-06  2013-01-04  2 days
3   2013-01-04  2013-01-03  1 days

让我知道它是否有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM