日付のリストを含むCSVファイルがあるとします。
05/04/2017 14:20,05/04/2017 17:54
05/04/2017 13:10,06/04/2017 07:56
05/04/2017 10:30,05/04/2017 11:04
各行を読んで、Pythonのdatetime
オブジェクトに各エントリを変換します。次に、Counter()
を使用して、1時間ごとに各エントリをメモして終了します。日時は、分が削除された辞書キーとして使用されます。以下の時間ごとの内訳与え
from collections import Counter
from datetime import datetime, timedelta
import csv
in_out = Counter()
one_hour = timedelta(hours=1)
with open('in_out.csv', 'r', newline='') as f_inout:
for row in csv.reader(f_inout):
in_at = datetime.strptime(row[0], "%d/%m/%Y %H:%M").replace(minute=0)
out_at = datetime.strptime(row[1], "%d/%m/%Y %H:%M").replace(minute=0)
in_out[in_at] += 1
in_out[out_at] -= 1
hours = []
room_total = 0
hours_range = sorted(in_out.keys()) # Use to determine start and end hours
hour = hours_range[0]
while hour <= hours_range[-1]:
room_total += in_out.get(hour, 0)
hours.append((hour, room_total))
hour += one_hour
for hour, room_total in hours:
print(hour, room_total)
:最後に、各時間見てすべてのエントリまたは終了時間の利用可能範囲を反復処理すると、追加のデフォルトの種類によって
2017-04-05 10:00:00 1
2017-04-05 11:00:00 0
2017-04-05 12:00:00 0
2017-04-05 13:00:00 1
2017-04-05 14:00:00 2
2017-04-05 15:00:00 2
2017-04-05 16:00:00 2
2017-04-05 17:00:00 1
2017-04-05 18:00:00 1
2017-04-05 19:00:00 1
2017-04-05 20:00:00 1
2017-04-05 21:00:00 1
2017-04-05 22:00:00 1
2017-04-05 23:00:00 1
2017-04-06 00:00:00 1
2017-04-06 01:00:00 1
2017-04-06 02:00:00 1
2017-04-06 03:00:00 1
2017-04-06 04:00:00 1
2017-04-06 05:00:00 1
2017-04-06 06:00:00 1
2017-04-06 07:00:00 0
@JohnE、GROUPBY()メソッドをデータを 'in'と 'out'でそれぞれ指定するので、私の例ではソートについて心配する必要はありません。 –