Pandas遍历DataFrame效率低,求无循环的向量化替代方案
解决Pandas循环遍历耗时问题:矢量化实现工作日偏移
你的代码执行慢的核心原因是逐行循环操作DataFrame——这完全浪费了Pandas和NumPy的矢量化运算优势,Python级别的循环在处理大数据量时会产生极高的开销。
直接用矢量化方式重写,完全规避循环:
步骤1:确保日期列是datetime类型(如果还不是)
df['Date_réception'] = pd.to_datetime(df['Date_réception'])
步骤2:矢量化计算工作日偏移
# 初始化目标列为NaN df['Date_engagement'] = np.nan # 筛选Engagement非空的行 mask = df['Engagement'].notna() # 对符合条件的整列批量执行busday_offset df.loc[mask, 'Date_engagement'] = np.busday_offset( df.loc[mask, 'Date_réception'].dt.date.values, # 提取日期数组 df.loc[mask, 'Engagement'].values, # 提取工作日偏移量数组 roll='backward', busdaycal=france_bdc )
为什么这样更快?
np.busday_offset原生支持数组输入,会直接在底层用C语言批量处理所有数据,而不是像循环那样逐行调用Python代码,速度能提升几个数量级。
你之前用apply没成功,是因为apply本质还是逐行/逐列的循环(只是封装了),效率提升有限,而矢量化才是真正的批量运算方案。
内容的提问来源于stack exchange,提问作者leboma241
相关产品推荐
相关产品推荐

