前提・実現したいこと
集計用にログの開始レコードと終了レコードを結合するスクリプトを作成しました。
もっと最適な実現方法があるのではないかと思うのですが
知識不足のため思いつきません。
みなさまのベストプラクティスを教えて頂ければ幸いです。
ライブラリなどの指定はありません。
よろしくお願いいたします。
該当のソースコード
python
1 2## INPUT 3 name status dtime 40 siro ST 2020-01-01 00:00:05 51 siro ST 2020-01-01 00:00:10 62 siro ED 2020-01-01 00:00:15 73 eiro ST 2020-01-02 00:00:20 84 eiro ST 2020-01-02 00:00:25 95 eiro ED 2020-01-02 00:00:30 106 airo ED 2020-01-03 00:00:35 117 kkkk ST 2020-01-04 01:10:10 128 eiro ST 2020-01-05 02:10:20 139 kkkk ED 2020-01-05 01:10:30 1410 eiro ED 2020-01-05 02:20:30 15 16## OUTPUT 17 name status1 dtime1 status2 dtime2 180 siro ST 2020-01-01 00:00:05 None None 191 siro ST 2020-01-01 00:00:10 ED 2020-01-01 00:00:15 202 eiro ST 2020-01-02 00:00:20 None None 213 eiro ST 2020-01-02 00:00:25 ED 2020-01-02 00:00:30 224 airo None None ED 2020-01-03 00:00:35 235 kkkk ST 2020-01-04 01:10:10 ED 2020-01-05 01:10:30 246 eiro ST 2020-01-05 02:10:20 ED 2020-01-05 02:20:30 25 26## 現状のプログラム 27import pandas as pd 28data=[ 29 ['siro','ST','2020-01-01 00:00:05'] 30 ,['siro','ST','2020-01-01 00:00:10'] 31 ,['siro','ED','2020-01-01 00:00:15'] 32 ,['eiro','ST','2020-01-02 00:00:20'] 33 ,['eiro','ST','2020-01-02 00:00:25'] 34 ,['eiro','ED','2020-01-02 00:00:30'] 35 ,['airo','ED','2020-01-03 00:00:35'] 36 ,['kkkk','ST','2020-01-04 01:10:10'] 37 ,['eiro','ST','2020-01-05 02:10:20'] 38 ,['kkkk','ED','2020-01-05 01:10:30'] 39 ,['eiro','ED','2020-01-05 02:20:30'] 40 41] 42cols = ['name', 'status1','dtime1','status2','dtime2'] 43odf = pd.DataFrame(index=[], columns=cols) 44 45for i,row in df.iterrows(): 46 df.loc[i,'p']=False 47 48for i,row in df.iterrows(): 49 50 if row.status == 'ST': 51 df.loc[i,'p']=True 52 53 for j,row2 in df[i+1:].iterrows(): 54 if row2.name==row2.name: 55 df.loc[j,'p']=True 56 if row2.status=='ST': 57 record = pd.Series([row.name, row.status, row.dtime,None,None], index=odf.columns) 58 odf = odf.append(record, ignore_index=True) 59 break 60 61 if row2.status=='ED': 62 record = pd.Series([row.name, row.status, row.dtime,row2.status,row2.dtime], index=odf.columns) 63 odf = odf.append(record, ignore_index=True) 64 break 65 66 if (row['p']==True): 67 continue 68 69 if row.status=='ED': 70 df.loc[i,'p']=True 71 record = pd.Series([row.name,None,None, row.status, row.dtime], index=odf.columns) 72 odf = odf.append(record, ignore_index=True) 73 74
補足情報(FW/ツールのバージョンなど)
python 3.6
ライブラリなどの指定はありません。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/23 14:40
2021/10/24 13:46
2021/10/24 13:50
2021/10/25 02:09
2021/10/25 14:30 編集
2021/10/25 23:45
2021/10/26 13:57 編集