我有一个让员工进出的数据集。它看起来像这样(注意每个员工两个条目):
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 :(得分: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])