2016-11-22 109 views
2

我有一个数据集,其中有员工进出时间。它看起来是这样的(注意每个员工的两个条目):在列中查找开始时间和结束时间

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 

我想要得到的数据是这样的:

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 

我想进入它的数据帧格式,以便我可以做一些计算。

目前我已经试过

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

我也试过:

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

如何获得两列了一个吗?

+0

我建议'Date'和'Time'合并成一个列'DateTime'。这将大大简化您的工作。 – burhan

+0

如果我把日期和时间合并在一起,那么我会怎么做? – KeatonYoung

+0

为什么不''df.groupby(['Employee','Date'])。agg([min,max])'? – Zero

回答

2

我建议将日期和时间合并到一个列中作为DateTime。这将大大简化您的工作。你可以这样做:

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']。agg([min,max])'然后'分组。 reset_index()' – burhan

+0

它没有用,但我会做更多的研究。我认为这可能只是对群体的限制。如果我找不到任何东西,我会提出另一个问题。再次感谢你! – KeatonYoung

相关问题