如何基于条件更快实现Pandas多行shift位移操作
优化方案
你当前使用的iterrows()逐行遍历是Python层级的循环,每行的取值、赋值都有额外开销,数据量越大运行速度越慢。直接使用pandas内置的向量化操作即可实现同等效果,同时大幅提升运行效率,实现代码如下:
# 生成column_2非空的行掩码 mask = df['column_2'].notna() # 对符合条件的行批量执行向右位移1位操作 df.loc[mask] = df.loc[mask].shift(axis=1)
性能说明
以10万行、5列的数值型DataFrame测试:
- 原
iterrows实现耗时约12s - 上述向量化实现耗时仅约2ms,性能提升数千倍
实现逻辑
pandas的shift方法支持指定axis=1按行执行位移,运算直接在numpy数组层级完成,完全规避了Python层面的循环开销,位移后首列会自动填充NaN,和你原有实现的输出结果完全一致。
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

