我有一個帶有開始和結(jié)束時間 (datetime.time) 的 Pandas DataFrame 用于進(jìn)程列表: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)] ])我想將此信息轉(zhuǎn)換為一個直方圖,用于計算正在運行的進(jìn)程數(shù):>>> 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])我有一個實現(xiàn),但是對于大數(shù)據(jù)幀(大約 2~3 百萬行)來說有點慢,我想知道是否有辦法對其進(jìn)行矢量化或至少使其更快: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貢獻(xiàn)1802條經(jīng)驗 獲得超5個贊
迭代數(shù)據(jù)幀通常是您未pandas最佳使用的標(biāo)志。您可以改為從已啟動的進(jìn)程中減去已結(jié)束的進(jìn)程,如下所示:
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
提交
取消