python - 如何根据时间范围连接2个pandas数据框

标签 python pandas time

我有两个数据框,我想根据时间范围将它们连接起来 例如

数据框A

user   timestamp    product
 A      2015/3/13      1
 B      2015/3/15      2

数据框B

 user      time     behavior
   A     2015/3/1      2
   A     2015/3/8      3
   A     2015/3/13     1
   B     2015/3/1      2

我想连接 2 个数据帧,如下所示(帧 B 左连接到帧 A) “timestamp1”列比“timestamp”列早 7 天 例如,当时间戳为 3/13 时,则 3/6-13 在范围内 否则不要连接

user   timestamp    product        time1       behavior 
 A      2015/3/13      1          2015/3/8        3
 A      2015/3/13      1          2015/3/13       1
 B      2015/3/15      2            NaN          NaN

sql 代码如下所示

select * from 
B left join  A
on user
where B.time >= A.timestamp - 7  &  B.time <= A.timestamp 

##WHERE B.time BETWEEN DATE_SUB(B.time, INTERVAL 7 DAY) AND A.timestamp ;

我们如何在 python 上实现这个?

只能想到以下内容,不知道如何处理时间..

new = pd.merge(A, B, on='user', how='left')

谢谢并抱歉..

最佳答案

解决此问题所需的几个步骤-

from datetime import timedelta 

首先,将时间戳转换为 pandas 日期时间。 (df1 指数据帧 A,df2 指数据帧 B)

df1[['time']]=df1[['timestamp']].apply(pd.to_datetime)
df2[['time']]=df2[['time']].apply(pd.to_datetime)

合并如下:(根据您的最终数据集,我认为您的左连接更像是右连接)

df3 = pd.merge(df1,df2,how='left') 

获取最终的 df:

df4 = df3[(df3.time>=df3.timestamp-timedelta(days=7)) & (df3.time<=df3.timestamp)]

缺少包含 nan 的行,这是因为 pandas 中执行条件连接的方式所致。

条件连接还不是 pandas 的功能。解决这个问题的一种方法是在连接后进行过滤。

关于python - 如何根据时间范围连接2个pandas数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43745938/

相关文章:

postgresql - 在postgresql中基于每N天分组

javascript - 如何在不使用整个日期的情况下仅将时间(类型为字符串)转换为 UTC 时间格式?

python - 如何在keras conv2d中指定过滤器

python - 随机抽取 3 个选号

python - 相当于 Python 的 pandas 的 R View

python - Pandas 拆分列名称

php - Timediff计算where查询

python - 从 WKT 字符串中提取 XY 范围

python - 解析 HTML 表格的最快、最简单和最好的方法?

python - 使用 python/pandas 从每周到每天填写缺失的日期