You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Pandas中耗时的逐行操作转化为高效向量化操作?

优化Pandas百万级数据集的逐行条件操作

处理百万级Pandas数据集时,apply(axis=1)的逐行循环效率极低,以下是几种高效的向量化替代方案,完全匹配你的需求:

方法1:向量化布尔索引(直观高效)

直接利用Pandas的布尔条件批量赋值,避免逐行循环:

import pandas as pd

df = pd.DataFrame({'A' : ['Yes', 'No', 'Yes', 'Yes', 'No'],
                   'B' : ['Blue', 'Red', 'Red', 'Blue', 'Blue']})

# 先给C列设默认值
df['C'] = 'foobar'
# 匹配第一个条件,批量赋值
df.loc[(df['A'] == 'Yes') & (df['B'] == 'Blue'), 'C'] = 'foo'
# 匹配第二个条件,批量赋值
df.loc[(df['A'] == 'Yes') & (df['B'] == 'Red'), 'C'] = 'bar'

这种方式依赖Pandas的向量化运算,百万级数据下速度比apply快10-100倍,代码逻辑也一目了然。

方法2:用numpy.select管理多条件

如果实际业务中有更多条件分支,np.select能更清晰地组织条件和对应结果:

import numpy as np

# 定义条件列表和对应的结果列表
conditions = [
    (df['A'] == 'Yes') & (df['B'] == 'Blue'),
    (df['A'] == 'Yes') & (df['B'] == 'Red')
]
choices = ['foo', 'bar']

# 批量生成结果,默认值设为'foobar'
df['C'] = np.select(conditions, choices, default='foobar')

新增条件时只需在conditions和choices中添加对应项,扩展性强,性能和布尔索引接近。

方法3:字典映射(适合固定条件组合)

把A、B的组合作为字典键,直接映射结果,这种方式在条件组合固定时速度极快:

# 构建条件组合到结果的映射字典
map_dict = {
    ('Yes', 'Blue'): 'foo',
    ('Yes', 'Red'): 'bar'
}

# 用zip批量组合A、B列,再通过map获取结果
df['C'] = [map_dict.get((a, b), 'foobar') for a, b in zip(df['A'], df['B'])]
# 或者更高效的纯批量写法:
df['C'] = list(map(map_dict.get, zip(df['A'], df['B']), ['foobar']*len(df)))

这种方式完全避开了Pandas的apply,用原生Python的批量操作实现,速度远超逐行循环。


内容的提问来源于stack exchange,提问作者Anoushiravan R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 00:05:11