pandas のデータ処理の高速化 と 表作成方法
以下のpythonのコードは、生産管理システムから取得したデータを「手順」「号機」で分類して
作業時間を求めています。作業は3つの手順からなり、開始日時と終了日時の差分が作業時間になりますが、中断があるので累積させる必要があります。
やりたいことは以下2つです。
1つ目:もっと高速に「手順」別、「号機」別の作業時間の算出と累積時間の算出はできないでしょうか?2重のforループとなっているのはあまりスマートではなさそうです。えらく時間がかかります。
2つ目:画像のような横軸が号機、縦軸が手順でセルには累積時間をセットした表を作成したいのですが方法が分かりません。リスト内辞書を作って、DataFrameに出来るかなとも思ったのですが
ここからが分かりませんでした。
import pandas as pd
from datetime import datetime
DF=ps.DataFrame(columns=['手順名','状態','開始日時','終了日時','号機'])
Items=[
['手順1','中断','2019-6-28 08:15:00','2019-6-28 08:16:00','1'],
['手順1','中断','2019-6-28 08:16:30','2019-6-28 08:17:30','1'],
['手順1','完成','2019-6-28 08:18:30','2019-6-28 08:19:30','1'],
['手順2','中断','2019-6-28 08:20:30','2019-6-28 08:21:30','1'],
['手順2','完成','2019-6-28 08:22:30','2019-6-28 08:23:30','1'],
['手順3','中断','2019-6-28 08:24:30','2019-6-28 08:25:30','1'],
['手順3','完成','2019-6-28 08:26:30','2019-6-28 08:27:30','1'],
['手順1','中断','2019-6-28 08:30:00','2019-6-28 08:31:00','2'],
['手順1','中断','2019-6-28 08:31:30','2019-6-28 08:32:30','2'],
['手順1','完成','2019-6-28 08:33:30','2019-6-28 08:34:30','2'],
['手順2','中断','2019-6-28 08:35:30','2019-6-28 08:36:30','2'],
['手順2','完成','2019-6-28 08:37:30','2019-6-28 08:38:30','2'],
['手順3','中断','2019-6-28 08:39:30','2019-6-28 08:40:30','2'],
['手順3','完成','2019-6-28 08:41:30','2019-6-28 08:42:30','2']
]
for i,Dat in enumerate(Items[::-1]):
DF.loc[i]=Dat
list_手順と号機=[]
for name,group in DF.groupby('手順名'):
df_時間sort = group.sort_values(by=['開始日時'],ascending=[True])
for name2,group2 in df_時間sort.groupby('号機'):
group2['作業時間'] = pd.to_datetime(group2['終了日時'])-pd.to_datetime(group2['開始日時'])
group2['累積時間'] = group2['作業時間'].cumsum()
list_手順と号機.append({'手順名':name,'号機':name2,'時間':group2['累積時間'].max()})