2016-11-22 27 views
2

従業員の入出庫データセットがあります。列内の開始時刻と終了時刻の検索

Employee Date Start End 
Emp1  1/1/16 06:00 13:00 
Emp2  1/1/16 09:00 17:00 
Emp3  1/1/16 11:00 18:00 

私はそのようにデータフレームフォーマットにそれを取得したいと思いを:私はこのように見えるようにデータを取得したい

Employee Date Time 
Emp1  1/1/16 06:00 
Emp1  1/1/16 13:00 
Emp2  1/1/16 09:00 
Emp2  1/1/16 17:00 
Emp3  1/1/16 11:00 
Emp3  1/1/16 18:00 

:これは(従業員一人当たり2つのエントリに注意してください)のように見えます私はいくつかの計算をすることができます。

私は現在

df['start'] = np.where((df['employee']==df['employee']&df['date']==df['date']),df['time'].min()) 

を試してみましたが、私も試してみました:

df.groupby(['employee','date]['time'].max() 

私は1つのうちの2つの列を取得するにはどうすればよいですか?

+0

私はDateTime' 'として1列に' 'Date'とTime'をマージすることをお勧めします。それはあなたの仕事を大幅に簡素化します。 – burhan

+0

日付と時刻をマージした場合、私は何をしますか? – KeatonYoung

+0

df.groupby(['Employee'、 'Date']).ggg([min、max]) 'はなぜですか? – Zero

答えて

2

DateTimeをDateTimeとして1つの列にマージすることをお勧めします。それはあなたの仕事を大幅に簡素化します。

df['DateTime']=pd.to_datetime(df['Date']+" "+df['Time']) 
df.groupby('Employee')['DateTime'].agg([min, max]) 

データの内容によっては、他のオプションもあります。あなたはすべてのエントリが同じ日になることを知っているなら、あなたは簡単に行うことができます。

# First convert Date and Time columns to DateTime type 
df['Date'] = pd.to_datetime(df['Date']).dt.date 
df['Time'] = pd.to_datetime(df['Time']).dt.time 
df.groupby('Employee').agg([min, max]) 

この場合にはDateTime列を作成する必要が。

あなたが行うことができ、各日当たり開始終了時刻を知りたい場合は、次の

# First convert Date and Time columns to DateTime type 
df['Date'] = pd.to_datetime(df['Date']).dt.date 
df['Time'] = pd.to_datetime(df['Time']).dt.time 
df.groupby(['Employee','Date'])['Time'].agg([min, max]) 
+0

私はそれを試してみました!ありがとうございました!今、「従業員」がすべての行に表示されるようにします。このデータフレームを別のデータフレームにマージする必要があります。 – KeatonYoung

+0

あなたが求めているのかどうかは確かではありませんが、これを試してください: 'grouped = df.groupby(['Employee'、 'Date'])['Time'] .ggg([min、max])' then 'grouped。 reset_index() ' – burhan

+0

これはうまくいきませんでしたが、もう少し調べてみます。私はそれが単にグループバイの限界かもしれないと思う。私が何かを見つけることができなければ、別の質問をするでしょう。ありがとうございました! – KeatonYoung

関連する問題