如何在pandas DataFrame中并行遍历两组列批量生成计算列
实现方案
pandas优先使用列级向量化操作实现这类需求,性能远高于逐行遍历,以下是两种常用实现方式:
方法1:同序号列对应计算(通用场景)
如果你的计算规则是Cn = An + Bn(你描述里的C1=A1+B2大概率是笔误,非通用规则可以看方法2),可以直接按序号对齐两组列批量计算:
import pandas as pd import numpy as np # 你的示例数据 df = pd.DataFrame(np.random.randn(3, 6), columns=['A1', 'A2', 'A3','B1', 'B2','B3']) # 按序号排序提取A、B两组列 a_cols = sorted([c for c in df.columns if c.startswith('A')], key=lambda x: int(x[1:])) b_cols = sorted([c for c in df.columns if c.startswith('B')], key=lambda x: int(x[1:])) # 方式1:小表直接遍历列名计算 for a_c, b_c in zip(a_cols, b_cols): df[f'C{a_c[1:]}'] = df[a_c] + df[b_c] # 方式2:10万行以上大表推荐用纯numpy向量化,效率更高 # df[[f'C{i+1}' for i in range(len(a_cols))]] = df[a_cols].values + df[b_cols].values
方法2:自定义列映射规则
如果确实需要按你写的特殊规则(C1=A1+B2、C2=A2+B2)计算,先定义列的对应关系再批量处理即可:
# 自定义A列对应B列的映射规则 col_match = { 'A1': 'B2', 'A2': 'B2', 'A3': 'B3' } for a_c, b_c in col_match.items(): df[f'C{a_c[1:]}'] = df[a_c] + df[b_c]
注意:尽量不要使用iterrows/apply按行遍历的方式实现,10万行以上的数据集性能会比列向量化操作慢100倍以上。
内容的提问来源于stack exchange,提问作者ponderwonder
相关产品推荐
相关产品推荐

