DataFrame.diff()
で時間間隔を調べ、特定の条件(今回の場合10分以上)の場合 Series.cumsum()
を使って別IDを振ります。
あとは、上記のIDによって groupby()
すれば分割できるかと思います。
・・と書いてみましたが、何が何やらかと思いますので、下記にサンプルを書きましたので動作を確認してください。
Python
1import pandas as pd
2import datetime
3
4# 適当なデータを生成
5df = pd.DataFrame({'time':['2017-1-1 11:00',
6 '2017-1-1 11:10',
7 '2017-1-1 11:20',
8 '2017-1-1 11:30',
9 '2017-1-1 11:40',
10 '2017-1-1 11:50',
11 '2017-1-1 12:00',
12 '2017-1-1 12:30',
13 '2017-1-1 12:40']})
14df['time'] = pd.to_datetime(df['time'])
15
16print(df)
17# time
18#0 2017-01-01 11:00:00
19#1 2017-01-01 11:10:00
20#2 2017-01-01 11:20:00
21#3 2017-01-01 11:30:00
22#4 2017-01-01 11:40:00
23#5 2017-01-01 11:50:00
24#6 2017-01-01 12:00:00
25#7 2017-01-01 12:30:00
26#8 2017-01-01 12:40:00
27
28
29# グループ分け用のIDを振る(間隔が10分以上あいたら別グループ)
30limit = datetime.timedelta(minutes=10)
31df['GroupID'] = (df['time'].diff() > limit).cumsum()
32
33# 上記の Group IDでグループ分けしたデータフレームを生成
34grouped_df = df.groupby('GroupID')
35
36# 各グループを表示(ループ使う場合)
37for id, sub_df in grouped_df:
38 print(sub_df)
39
40# グループIDを使って取得することも可
41print(grouped_df.get_group(0))
42# time GroupID
43#0 2017-01-01 11:00:00 0
44#1 2017-01-01 11:10:00 0
45#2 2017-01-01 11:20:00 0
46#3 2017-01-01 11:30:00 0
47#4 2017-01-01 11:40:00 0
48#5 2017-01-01 11:50:00 0
49#6 2017-01-01 12:00:00 0
50
51print(grouped_df.get_group(1))
52# time GroupID
53#7 2017-01-01 12:30:00 1
54#8 2017-01-01 12:40:00 1
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/12 05:01