出入口に設置したセンサーでIDカードを持った人の出入りの集計をしたいと思っています。
入力データは以下のような感じで1日の中で一番小さい時間を出勤時間、一番大きい時間を退勤時間としたいと思っています。
一日の最大、最小の集計はできたのですがこの2つを USER+DATE ごとに結合ができません。
どのようにしたらいいでしょうか?
import pandas as pd t1 = pd.DataFrame({ 'USER':[1,2,1,3,1,1,2], 'TIME':['2016-02-01 09:25','2016-02-01 09:59','2016-02-01 12:05','2016-02-01 09:55','2016-02-01 12:59','2016-02-01 18:01','2016-02-01 21:55'], 'ACTION':['IN','IN','OUT','IN','IN','OUT','OUT']}, index=[0,1,2,3,4,5,6], columns = ['USER','TIME','ACTION']) # 集計用に日単位キー追加 t1['DATE'] = t1['TIME'].str[0:10] # 出勤時間抽出 t2 = t1[t1['ACTION'] == 'IN'].groupby(['USER','DATE'])['USER','DATE','TIME'].min() # 退社時間抽出 t3 = t1[t1['ACTION'] == 'OUT'].groupby(['USER','DATE'])['USER','DATE','TIME'].max() # エラーになってしまう pd.merge(t2, t3, on=['USER', 'DATE'])
データの内容は以下のようになっています。
>>> t1 USER TIME ACTION DATE 0 1 2016-02-01 09:25 IN 2016-02-01 1 2 2016-02-01 09:59 IN 2016-02-01 2 1 2016-02-01 12:05 OUT 2016-02-01 3 3 2016-02-01 09:55 IN 2016-02-01 4 1 2016-02-01 12:59 IN 2016-02-01 5 1 2016-02-01 18:01 OUT 2016-02-01 6 2 2016-02-01 21:55 OUT 2016-02-01 >>> t2 TIME USER DATE 1 2016-02-01 2016-02-01 09:25 2 2016-02-01 2016-02-01 09:59 3 2016-02-01 2016-02-01 09:55 >>> t3 TIME USER DATE 1 2016-02-01 2016-02-01 18:01 2 2016-02-01 2016-02-01 21:55
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。