如何不用for循环基于另一个dataframe列更新当前dataframe对应列
无循环实现方案
两种向量化实现方式,性能远高于iterrows遍历,数据量越大优势越明显:
方法1:映射匹配法
将df2转为id到val的映射关系,匹配不到的默认填充1(除以1不改变原值),直接做逐元素运算:
# 构造id到val的映射Series val_map = df2.set_index('id')['val'] # 匹配id并做除法,未匹配值保持不变 df1['val'] = df1['val'] / df1['id'].map(val_map).fillna(1)
方法2:索引对齐法
利用pandas索引自动对齐的特性实现匹配运算:
# 临时将id设为索引 df1_idx = df1.set_index('id') df2_idx = df2.set_index('id') # 按索引匹配做除法,未匹配到的行默认除以1 df1_idx['val'] = df1_idx['val'].div(df2_idx['val'], fill_value=1) # 恢复id为普通列 df1 = df1_idx.reset_index()
内容的提问来源于stack exchange,提问作者Ankur
相关产品推荐
相关产品推荐

