私は、ほぼ200万のエントリを持つDataFrameを持っています。このDataFrameのサブセットを作成したいと思います。大規模なデータセットから毎日1時間ごとに500件のエントリを抽出するにはどうすればよいですか?
特に、私が望むのは、データセット内の毎日の1時間ごとに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
UPDATE:
サンプルデータフレーム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
Iは、例えば、各時間の最初のN個のエントリ(最初の3つのエントリを含むであろうサブセットres
を取得したいと思い下記の例のように):
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
あなたが追加することができますいくつかのサンプルデータおよび所望の出力。検証可能なサンプルではなく、3つのエントリに対して500? – jezrael
@ jezrael:私の更新を確認してください。この問題は、 'for'ループを使用しているときに長い計算時間で構成されています。この時間を短縮できる解決策を見つけたいと思います。 – Dinosaurius