前提
ある部屋の入退室時間を記録した以下の様な CSV があります。
・入退室記録(in-out.csv)
社員ID | 入室時間 | 退室時間 |
---|---|---|
A10 | 2021/7/1 7:01 | 2021/7/1 20:40 |
A11 | 2021/7/1 7:05 | 2021/7/1 17:30 |
A12 | 2021/7/1 7:10 | 2021/7/1 7:28 |
(... 以下、3000 行ほど続く)
また、出力したい時間範囲をあらわす CSV があります。
・計測時間範囲.csv(count-time.csv)
計測開始日時 | 計測終了日時 |
---|---|
2021/7/1 7:00 | 2021/7/1 7:10 |
2021/7/1 7:10 | 2021/7/1 7:20 |
2021/7/1 7:20 | 2021/7/1 7:30 |
2021/7/1 7:40 | 2021/7/1 7:50 |
...(以下、10分間隔で 24 時まで続く)
やりたいこと
入退室時間を記録した csv に対し、時間範囲の CSV の範囲ごとに「どの時間帯に何人が入室していたか」というリストを Python で出力したいです。
↓ 出力csvイメージ
計測開始日時 | 計測終了日時 | 同時入室人数 |
---|---|---|
2021/7/1 7:00 | 2021/7/1 7:10 | 2 |
2021/7/1 7:10 | 2021/7/1 7:20 | 3 |
2021/7/1 7:20 | 2021/7/1 7:30 | 3 |
2021/7/1 7:30 | 2021/7/1 7:40 | 2 |
特定の時間範囲のみであれば
入室時間 <= 計測終了日時 And 計測開始日時 < 退室時間
で出力できるところまでは理解し、特定の時間帯(この場合は 9:00 -- 9:10 の間)を指定してカウントするコードは以下の様に書いています。(こちらも間違いがあれば、あるいはスマートな書き方があればご指摘いただきたいです)
手動で指定している 9:00 -- 9:10 をcount-time.csv から読み込んで「出力csvイメージ.csv」にような形でカウント数を出したいのですが、ここからどのようにしたらよいか詰まってしまいました。
python
1import pandas as pd 2import datetime as dt 3 4# csv 読み込み 5inout = pd.read_csv("in-out.csv") 6ct = pd.read_csv("count-time.csv") 7 8# 各カラムをdatetime型へ変換 9inout['in'] = pd.to_datetime(inout['in']) 10inout['out'] = pd.to_datetime(inout['out']) 11ct['start'] = pd.to_datetime(ct['start']) 12ct['end'] = pd.to_datetime(ct['end']) 13 14# 2021/7/1 9:00 -- 9:10 の間に室内にいた人数をカウント 15# (入室時間 <= 計測終了日時) And (計測開始日時 < 退室時間) 16len(inout[(inout["in"] <= dt.datetime(2021,7,1,9,10)) & (dt.datetime(2021,7,1,9,0) <= inout["out"])])
何卒よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/04/27 05:32