我有一个数据框df
。该 Dataframe 由列id
、time
和quantity
组成。我必须基于time
对这个df
进行重复查询,查询应该返回查询时间对应的id-quantity
对。df
按id
预先排序,在每个id
组中,它基于time
进行排序(尽管顺序本身可能对 Dataframe 查询没有多大帮助)。
查询是以某种交替的顺序进行的,并且存在重复的查询,例如,我们可以按以下顺序查询:time = 10, 0, 10, 0, 10, 0, 20, 10, 20, 10, 20, 10, 30, 20, 30, 20, 30, 20, ....
它是按递增的交替顺序排列的,请注意,df
中的所有时间最终都会被查询。
目前,我的实现不涉及任何缓存,它只是简单地做了:
def query(df, time):
return df[df.time == time][["id", "quantity"]]
但我认为这可能是低效的。我不太熟悉Python和pandas,但我的理解是df[df.time == time]
可能是一个昂贵的操作,特别是当df
很大时,在我的情况下,大约有100k行。
我如何才能更有效地做到这一点?
我的一个想法是,我们可以使用dict
,其中键是df.time().unique()
,值是对应于该时间的行,但我不确定这是否是最有效的方法。
1条答案
按热度按时间vql8enpb1#
如果时间戳是唯一的,则可以在时间戳列上设置索引。这类似于关系数据库上的索引。
然后在时间戳上过滤是非常有效和快速的,你可以做更高级的操作。例如
(1)加载具有时间戳级别数据的dataset并在其上设置索引
(2)执行过滤