2017-08-27 8 views
1

私は、エントリーがタイムスタンプでマークされた大きなデータセットをPandasに持っています。私はどのように定義された長さの範囲(1分のような)を取得するための解決策を探していますエントリの出現率が高い。定義された時間(Pandasの)で最も頻繁に出現するシリーズの範囲を見つける

1つの解決策は、より高い時間枠(分など)にデータを再サンプリングし、セクションを最大数の値と比較することです。ただし、指定された時間枠の開始時刻と終了時刻に対応する範囲のみが検索されます。

実際にどこから始めても、1分の範囲を見つけるための解決策を見つけることができます。私はこのよう

8:50:00 
8:50:01 
8:50:03 
8:55:00 
8:59:10 
9:00:01 
9:00:02 
9:00:03 
9:00:04 
9:05:00 

だろう:私は範囲内の最初の信号で始まるエントリの最高発生で1分「窓」を探しているであろうし、範囲内の最後の信号で終わる例を以下に

範囲を取得するように8:59:10 - 9:00:04

どのようなヒント?

答えて

1

スライド開始時間が1秒の1分のウィンドウを作成する必要があります。いずれかのウィンドウの最大発生を計算します。 0.19.0以上のパンダでは、baseを引数として時系列を再サンプリングして、異なる時間に再サンプリングされたウィンドウを開始することができます。

私はtempfileを使用して、以下のおもちゃデータセットとしてデータをコピーしました。このおもちゃのデータセットについて

import tempfile 
import pandas as pd 

tf = tempfile.TemporaryFile() 
tf.write(b'''8:50:00 
8:50:01 
8:50:03 
8:55:00 
8:59:10 
9:00:01 
9:00:02 
9:00:03 
9:00:04 
9:05:00''') 
tf.seek(0) 

df = pd.read_table(tf, header=None) 
df.columns = ['time'] 
df.time = pd.to_datetime(df.time) 

max_vals = [] 
for t in range(60): 
    # .max().max() is not a mistake, use it to return just the value 
    max_vals.append(
     (t, df.resample('60s', on='time', base=t).count().max().max()) 
    ) 

max(max_vals, key=lambda x: x[-1]) 
# returns: 
(5, 5) 

、窓のための5秒のオフセット(すなわち午前8時49分05秒、午前8時50分05秒、...)1の窓のための最大カウントの最初のを持っています分、5カウント。

関連する問題