我有一个包含近 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
