Skip to main content
 首页 » 编程设计

python之如何从大型数据集中提取每天每小时的 500 个条目

2025年05月04日22myhome

我有一个包含近 200 万个条目的 DataFrame。我想创建此 DataFrame 的一个子集。

特别是,我想要在数据集中为每天的每小时获取 500 个条目。结果应保存在新的 DataFrame 中 res .有一列叫做datetime_event , 和 dates创建如下 dates = pd.to_datetime(df['datetime_event']) .

这是我的代码,但需要很多小时才能完成。是否可以对其进行一些优化,例如使用 apply和 lambda ?

counter = 0 
current_hour = 0 
res = pd.DataFrame(columns=df.columns) 
for i in range(0,len(df.index)): 
   hour = dates.dt.hour[i] 
   if current_hour != hour: 
       current_hour = hour 
       counter = 0 
   if counter <= 500: 
       res.loc[i] = df.loc[i] 
       counter += 1 

更新:

示例数据框 df :

id   datetime_event        title 
11   2017-05-01T00:00:08   AAA 
12   2017-05-01T00:00:08   BBB 
13   2017-05-01T00:00:08   CCC 
14   2017-05-01T00:00:09   BBB 
15   2017-05-01T00:00:09   DDD 
16   2017-05-01T01:01:00   EEE 
17   2017-05-01T01:01:01   EEE 
18   2017-05-01T01:01:09   DDD 
19   2017-05-01T01:01:09   EEE 
20   2017-05-01T01:01:11   EEE 

我想得到一个子集 res将包含每个小时的前 N ​​个条目(例如,前 3 个条目,如下例所示):

id   datetime_event        title 
11   2017-05-01T00:00:08   AAA 
12   2017-05-01T00:00:08   BBB 
13   2017-05-01T00:00:08   CCC 
16   2017-05-01T01:01:00   EEE 
17   2017-05-01T01:01:01   EEE 
18   2017-05-01T01:01:09   DDD 

请您参考如下方法:

更新:

In [22]: df.groupby(pd.to_datetime(df['datetime_event']).dt.floor('H')).head(3) 
Out[22]: 
   id       datetime_event title 
0  11  2017-05-01T00:00:08   AAA 
1  12  2017-05-01T00:00:08   BBB 
2  13  2017-05-01T00:00:08   CCC 
5  16  2017-05-01T01:01:00   EEE 
6  17  2017-05-01T01:01:01   EEE 
7  18  2017-05-01T01:01:09   DDD