[英]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.