所有机器忙时的标志列?

2024-03-28 11:14:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个机器上事务的数据帧,按开始时间(a)按时间顺序排列日期时间.time列)。 机器有位置A、B、C等。 我想创建一个标志列,显示该位置中的所有计算机当前是否都在使用,也就是说,事务的开始时间在该位置上其他计算机的开始/结束时间内。你知道吗

我试图通过确定所有机器何时都忙来推断机器何时可以排队。你知道吗

我的数据帧如下所示,目前缺少“所有忙”列:

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

我希望创建“all busy”列,但无法计算逻辑。你知道吗

编辑:我的尝试:

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天才能完成运行(!!!)你知道吗

有人能把这个操作矢量化吗?你知道吗


Tags: 数据机器dftranstimecount计算机时间
1条回答
网友
1楼 · 发布于 2024-03-28 11:14:31

您可以使用以下代码:

df['all_are_busy'] = df.groupby(['location'])['all busy'].transform(lambda x: x.eq('Y').all())

小心:如果一个位置上只有一台机器,这也会返回True

相关问题 更多 >