2016-09-06 3 views
-1

私が午前と仮定データをフラグを設定し、データはすべてのIDと特定のために3つの列のID、日付と時刻、特定のIDの場合は、すべての3分間チェックし、次のようにpythonで

ID date  Time 
1 8/20/2016 20:27:25 
1 8/20/2016 20:29:04 
1 8/20/2016 20:29:05 
1 8/20/2016 20:38:38 
1 8/20/2016 20:38:38 
2 8/20/2016 14:24:53 
3 8/20/2016 21:18:37 
3 8/20/2016 21:18:37 
4 8/20/2016 01:08:34 
4 8/20/2016 01:08:35 
4 8/20/2016 01:08:35 
4 8/20/2016 01:08:35 
4 8/20/2016 11:08:35 
4 8/20/2016 11:08:35 
4 8/20/2016 11:08:35 
5 8/20/2016 09:35:17 
5 8/20/2016 09:36:05 
5 8/20/2016 09:36:19 
5 8/20/2016 09:36:21 
5 8/20/2016 00:01:59 
5 8/20/2016 00:04:59 
6 8/20/2016 00:02:13 
6 8/20/2016 00:02:17 
6 8/20/2016 00:02:19 
6 8/20/2016 00:02:21 
6 8/20/2016 00:02:24 
6 8/20/2016 00:02:26 
6 8/20/2016 00:04:27 
6 8/20/2016 00:04:27 
6 8/20/2016 00:04:28 
6 8/20/2016 00:04:30 
6 8/20/2016 00:04:35 
6 8/20/2016 01:45:23 
7 8/20/2016 00:14:30 
7 8/20/2016 00:14:33 
7 8/20/2016 00:14:47 
7 8/20/2016 00:14:56 
7 8/20/2016 00:21:56 

を持っています日付を最初に確認してから、次の3分に対応するエントリを見つけてフラグを1に設定します。時間が3分以内でなければ、フラグを2に設定してチェックを続けます次の3分間。基本的に私はすべてのIDに対して3分のセットを見つけたいと思っています。私は3分ごとにレコードを分析したいと思います。このようなフラグがあれば、それを分析するのに役立ちます。

私が望む出力され、すべてのID、日付のために、すべての3分間、1はフラグに追加され

ID date   Time  flag 
1 8/20/2016 20:27:25 1 
1 8/20/2016 20:29:04 1 
1 8/20/2016 20:29:05 1 
1 8/20/2016 20:38:38 2 
1 8/20/2016 20:38:38 2 
2 8/20/2016 14:24:53 1 
3 8/20/2016 21:18:37 1 
3 8/20/2016 21:18:37 1 
4 8/20/2016 01:08:34 1 
4 8/20/2016 01:08:35 1 
4 8/20/2016 01:08:35 1 
4 8/20/2016 01:08:35 1 
4 8/20/2016 11:08:35 2 
4 8/20/2016 11:08:35 2 
4 8/20/2016 11:08:35 2 
5 8/20/2016 09:35:17 1 
5 8/20/2016 09:36:05 1 
5 8/20/2016 09:36:19 1 
5 8/20/2016 09:36:21 1 
5 8/20/2016 00:01:59 2 
5 8/20/2016 00:04:59 3 
6 8/20/2016 00:02:13 1 
6 8/20/2016 00:02:17 1 
6 8/20/2016 00:02:19 1 
6 8/20/2016 00:02:21 1 
6 8/20/2016 00:02:24 1 
6 8/20/2016 00:02:26 1 
6 8/20/2016 00:04:27 2 
6 8/20/2016 00:04:27 2 
6 8/20/2016 00:04:28 2 
6 8/20/2016 00:04:30 2 
6 8/20/2016 00:04:35 2 
6 8/20/2016 01:45:23 3 
7 8/20/2016 00:14:30 1 
7 8/20/2016 00:14:33 1 
7 8/20/2016 00:14:47 1 
7 8/20/2016 00:14:56 1 
7 8/20/2016 00:21:56 2 

私はこれをPythonの初心者として試してみることができません。私はこれを謝罪します。もし誰かがこれをどうやって行うのか分からなければ、それは私にとって参考になるでしょう。

+0

あなたのデータセットは、私には思えるオフ:私はあなたのロジックを理解していれば、 '2016年8月20日20との最初のレコード:38:38''としてフラグ付けされなければなりません非常に前のレコード「8/20/2016 20:29:05」は「2」にフラグが立てられていたはずである。あなたは確認して説明することができますか? – sal

+0

@sal特定の日付の特定のIDの場合、フラグは1から始まります。3分が経過するまで1になるはずです。 3分が経過すると、フラグは2に設定され、次の3分間チェックされます。すべてのID、毎日、私は値の3分セットを取得したいと思います。 – gangi

+0

@zvone私は、IDと日付の2つのforループに関して、日付の最初の値をチェックしました。しかしその後、私はそれを完了することができませんまた、2つのforループを使用すると、コードは非常に複雑で時間がかかります。 – gangi

答えて

1

最初に行うべきことは、有用なデータ構造にデータを入れることです。セットのリストを選択しました。これらのレコードは、最初に、(ID、日付)によってグループ化する必要があります。これは、の機能を使用する簡単なタスクです。itertoolsです。

データがデータベースからのものである場合、そのようなグループ化をデータベース自体で実行できます。

そして残ってその全てがこれらのグループの各ループであり、そして初期のレコードと次との間のいつの時間デルタは、3分(3*60flag値を大きくし、それに沿って移動するようにreference_timeの更新を超えます。以下

完全なコード、データが低下するが、しかし、あなたはまた、https://eval.in/636448

ノートで例の作業全体を見ることができます:私はあなたの参照データがデータセットid=6に誤りがあると考えています。

from itertools import groupby 
from datetime import datetime 

data = [ 
('1', '8/20/2016', '20:27:25'), 
# ... 
('7', '8/20/2016', '00:21:56') 
] 


FMT = '%H:%M:%S' 
for key, group in groupby(data, lambda x: (x[0],x[1])): 
    # group data based on (id, date), ignore 'key' 

    reference_time = None 
    flag = 1 
    for cur_id, cur_date, cur_time in group: 
     # for each group, test the delta-3 condition 
     if reference_time is None: 
      # init 
      reference_time = cur_time 
      print cur_id, cur_date, cur_time, flag 
      continue 
     delta = datetime.strptime(cur_time, FMT) - datetime.strptime(reference_time, FMT) 
     if delta.seconds >= (3*60): 
      # check if time diff is >= 3 minutes from start of sequence 
      # increase flag, and update the reference timestamp 
      reference_time = cur_time 
      flag += 1 
     print cur_id, cur_date, cur_time, flag 

結果:

1 8/20/2016 20:27:25 1 
1 8/20/2016 20:29:04 1 
1 8/20/2016 20:29:05 1 
1 8/20/2016 20:38:38 2 
1 8/20/2016 20:38:38 2 
2 8/20/2016 14:24:53 1 
3 8/20/2016 21:18:37 1 
3 8/20/2016 21:18:37 1 
4 8/20/2016 01:08:34 1 
4 8/20/2016 01:08:35 1 
4 8/20/2016 01:08:35 1 
4 8/20/2016 01:08:35 1 
4 8/20/2016 11:08:35 2 
4 8/20/2016 11:08:35 2 
4 8/20/2016 11:08:35 2 
5 8/20/2016 09:35:17 1 
5 8/20/2016 09:36:05 1 
5 8/20/2016 09:36:19 1 
5 8/20/2016 09:36:21 1 
5 8/20/2016 00:01:59 2 
5 8/20/2016 00:04:59 3 
6 8/20/2016 00:02:13 1 
6 8/20/2016 00:02:17 1 
6 8/20/2016 00:02:19 1 
6 8/20/2016 00:02:21 1 
6 8/20/2016 00:02:24 1 
6 8/20/2016 00:02:26 1 
6 8/20/2016 00:04:27 1 
6 8/20/2016 00:04:27 1 
6 8/20/2016 00:04:28 1 
6 8/20/2016 00:04:30 1 
6 8/20/2016 00:04:35 1 
6 8/20/2016 01:45:23 2 
7 8/20/2016 00:14:30 1 
7 8/20/2016 00:14:33 1 
7 8/20/2016 00:14:47 1 
7 8/20/2016 00:14:56 1 
7 8/20/2016 00:21:56 2 
+0

ありがとうございます。データフレームとして自分のデータがあります。それを直接使用し、出力をそこに列として保存できますか? – gangi

+0

私はそのフォーマットに精通していませんが、できると確信しています。 – sal

関連する問題