我基本上想从下面的DataFrame中创建在任何时间点办公室出勤的员工数量:
df = pd.DataFrame({
'Emp_id': [121,321,451,121,
451,451,321,755],
'TimeStamp': ['29-07-2019 08:55:55','29-07-2019 09:02:55','29-07-2019 09:05:50','29-07-2019 10:05:50',
'29-07-2019 10:07:50','29-07-2019 10:10:10','29-07-2019 10:20:10','29-07-2019 11:00:00'],
'Status': ['IN','IN','IN','OUT','OUT','IN','OUT','IN']
})
df
Emp_id TimeStamp Status
0 121 29-07-2019 08:55:55 IN
1 321 29-07-2019 09:02:55 IN
2 451 29-07-2019 09:05:50 IN
3 121 29-07-2019 10:05:50 OUT
4 451 29-07-2019 10:07:50 OUT
5 451 29-07-2019 10:10:10 IN
6 321 29-07-2019 10:20:10 OUT
7 755 29-07-2019 11:00:00 IN
我解决这个问题的方法是:对每个“Emp_id”进行分组,并找到其最大的“TimeStamp”条目。从中,如果我可以筛选出“IN”状态,然后计算所有这些状态的数量,就是仍在办公室的员工人数。
time_entry = df[['Emp_id','TimeStamp']].groupby(['Emp_id']).max()['TimeStamp']
Final_Status = []
for i in time_entry:
Final_Status.append(df.loc[df['TimeStamp'] == i, ['Status']])
Final_Status
>> output
[ Status
3 OUT, Status
6 OUT, Status
5 IN, Status
7 IN]
问题:
我得到了一个奇怪的“Final_Status”列表。 它有标题和索引与列表值
[ 状态 3 外部, 状态 6 外部, 状态 5 内部, 状态 7 内部]
这不允许我从列表中计算“内部”的数量,即Final_Status.count('内部')
不能工作。
任何其他更聪明的解决这个问题的方法也是可行的。