我有一个带有开始和结束时间 (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]
添加回答
举报
0/150
提交
取消