Pandas DataFrame基于多列条件批量修改指定字段值的高效方法
高效实现方案
直接使用Pandas向量化操作替代行迭代,性能远高于iterrows实现,可轻松应对千列、十万行以上的数据集:
核心代码
import pandas as pd # 1. 筛选符合条件的行:指定列集合col_list下的所有值仅为40或10000 valid_row_mask = df[col_list].isin([40, 10000]).all(axis=1) # 2. 仅修改指定列中值为40的字段为1 df.loc[valid_row_mask, col_list] = df.loc[valid_row_mask, col_list].replace(40, 1)
完整测试验证
# 构造示例DataFrame df = pd.DataFrame({ 60: [1, 40, 15, 1], 700: [40, 40, 40, 40], 701: [40, 1, 40, 40], 702: [1, 10000, 10000, 10000] }) col_list = [700, 701, 702] # 执行处理逻辑 valid_row_mask = df[col_list].isin([40, 10000]).all(axis=1) df.loc[valid_row_mask, col_list] = df.loc[valid_row_mask, col_list].replace(40, 1) print(df)
执行后输出和预期完全一致:
60 700 701 702 0 1 40 40 1 1 40 40 1 10000 2 15 1 1 10000 3 1 1 1 10000
性能说明
整个逻辑全部是Pandas底层C实现的向量化运算,没有Python层的循环,相比iterrows性能提升至少两个数量级,数据集越大优势越明显。
内容的提问来源于stack exchange,提问作者Nick W
相关产品推荐
相关产品推荐

