为了账号安全,请及时绑定邮箱和手机立即绑定

计算时间间隔之间的行数

计算时间间隔之间的行数

跃然一笑 2021-09-02 14:59:55
我有一个带有开始和结束时间 (datetime.time) 的 Pandas DataFrame 用于进程列表:from datetime import timeimport pandas as pddf = pd.DataFrame(columns=['start', 'end'],                   index=pd.Index(['proc01', 'proc02'], name='Processes'),                   data=[                        [time(10), time(14)],                         [time(12), time(16)]                  ])我想将此信息转换为一个直方图,用于计算正在运行的进程数:>>> bins = pd.date_range('08:00', '22:00', freq='1H').time>>> count_processes(df, bins)array([0, 0, 1, 1, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0])我有一个实现,但是对于大数据帧(大约 2~3 百万行)来说有点慢,我想知道是否有办法对其进行矢量化或至少使其更快:def count_processes(df, bins):     result = np.zeros_like(bins, dtype=int)     for _, row in df.iterrows():         aux = (row['start'] <= bins) & (bins < row['end'])         result += aux.astype(int)     return result
查看完整描述

2 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

迭代数据帧通常是您未pandas最佳使用的标志。您可以改为从已启动的进程中减去已结束的进程,如下所示:


res = []

for b in bins:

    s = (df['start'] < b).sum()

    e = (df['end'] < b).sum()

    res.append(s-e)

# [0, 0, 0, 1, 1, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0]


查看完整回答
反对 回复 2021-09-02
  • 2 回答
  • 0 关注
  • 181 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号