我有一个机器上的事务数据框架,按开始时间(datetime.time列)的时间顺序排列。 机器具有位置A,B,C等 我想创建一个标志列,显示当前是否正在使用该位置的所有计算机,即事务的开始时间在该位置其他计算机的开始/结束时间之内。
我试图通过确定所有机器何时繁忙来推断何时有机器排队。
我的DataFrame启发式地布置在下面,目前缺少“所有忙碌”列:
terminal ID MACHINE_LOCATION MACHINE_COUNT TRANS_TIME NEXT_TIME all busy
001 A 3 09:00:00 09:08:00 N
002 A 3 09:01:00 09:04:00 N
003 A 3 09:02:00 09:07:00 Y
002 A 3 09:06:00 09:07:00 Y
004 B 3 09:07:00 09:09:00 N
我希望创建“所有忙碌”列,但无法弄清楚逻辑。
编辑:我的尝试:
for i, r in df.iterrows():
subgr = df[(df['MACHINE_LOCATION'] == r['MACHINE_LOCATION'])&(df['TRANS_DTE'] ==
r['TRANS_DTE'])&(df['TRANS_HR'] == r['TRANS_HR'])]
if len(subgr[(subgr['TRANS_TIME'] < r['TRANS_TIME'])&(subgr['NEXT_TIME'] >
r['TRANS_TIME'])]) == r['MACHINE_COUNT']:
df.loc[i,'ALL_BUSY'] = 'Y'
else:
df.loc[i,'ALL_BUSY'] = 'N'
但这需要34天才能完成运行(!!!)
任何人都可以矢量化此操作吗?
答案 0 :(得分:1)
您可以使用以下代码:
df['all_are_busy'] = df.groupby(['location'])['all busy'].transform(lambda x: x.eq('Y').all())
小心:如果您所在的位置只有一台机器,这也会返回True