我有两个数据框,我想根据时间范围将它们连接起来 例如
数据框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/