如何获得满足特定条件的数据帧部分?

2024-04-24 04:39:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我想得到一个数据帧的一部分,它满足一定的要求。你知道吗

我想做:

new_df = old_df[old_df.timevariable.date() == thisdateiwant]

有没有一种有效的方法可以做到这一点? 这里的问题是.date()部分。在使用相同的语法之前,我已经这样做了,但是没有使用旧的\u df的修饰符。例如旧的_df.time变量是一个datetime,那么我可以将它与==datetime匹配,但是由于我想要一个日期,我需要修改dataframe中的每个元素,这是语法不喜欢的。你知道吗

我知道我可以把它全部取出来,用一堆变量循环,但我很确定这会慢得多。第一个代码段似乎是实现这一点的最快方法(如WHERE SQL子句),不过如果需要修改要比较的变量(如.date()),它似乎不起作用。你知道吗

旧的东方不败是大约(900k,15)的大小,所以我想得到一些有效的。目前,我只是更改变量并从SQL重新导入,似乎每个日期需要5-10秒(thisdateiwant)。我假设在python中使用较大的初始数据库会比这个更快。通常,对于每个日期,它会将大约3万行返回到新的\u df中。你知道吗

最快的方法是什么?你知道吗

编辑

很高兴将此标记为一个副本,我从另一个问题的一些代码(来自@Pault)得到了它。 基本上做到了:

mask = old_db['timevariable'] >= thisdateiwant
mask2 =  old_db['timevariable'] < thisdateiwant (+1day)
new_db = old_db.loc[mask]
new_db = new_db.loc[mask2]

我不认为有一个简单的方法来做两个面具在同一时间,似乎抛出和错误。又好又快,所以我很高兴。你知道吗


Tags: 数据方法dfnewdbsqldatetimedate
1条回答
网友
1楼 · 发布于 2024-04-24 04:39:04

如果列确实是时间戳,那么可以使用dt访问器。你知道吗

new_df = old_df[old_df.timevariable.dt.floor('D') == '2018-05-09']

否则,使用pd.to_datetime将目标列更改为timestamp

old_df[timevariable] = pd.to_datetime(old_df[timevariable])

没有dt访问器,日期范围得到更自然的支持

new_df = old_df[old_df.timevariable >= '2018-05-09'] <- dates after may 9th inclusive

相关问题 更多 >