在列中查找开始时间和结束时间

时间:2016-11-22 17:13:11

标签: python-3.x pandas numpy

我有一个让员工进出的数据集。它看起来像这样(注意每个员工两个条目):

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()

如何从一个列中获取两列?

1 个答案:

答案 0 :(得分: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])