我有一个带有开始和结束时间 (datetime.time) 的 Pandas DataFrame 用于进程列表:
from datetime import time
import pandas as pd
df = 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
12345678_0001
相关分类