gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 02:51:31 25 4
gpt4 key购买 nike

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

数据框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指的是Dataframe A,df2指的是Dataframe 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com