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

有没有比嵌套循环更高效的方案实现Pandas DataFrame匹配填充价格?

高效实现方案

推荐优先使用pandas矢量化操作替代循环,性能提升可达百倍至千倍量级,以下是两种可行方案:

方案1:使用map映射(最高效,适合单字段匹配赋值)

直接将DF2转为Security_ID为键、Price为值的字典,直接对DF1的目标列赋值即可:

# 构造映射字典
price_map = DF2.set_index('Security_ID')['Price'].to_dict()
# 直接映射赋值
DF1['Current Date Price'] = DF1['Security Number Key'].map(price_map)

该方案完全避免了循环,是单字段匹配赋值的最优解,匹配不到的证券(比如示例中的C)会自动保留NaN值,完全符合需求。

方案2:使用merge关联(适合多字段需要同步匹配的场景)

如果后续需要从DF2同步更多字段,可以用左连接实现:

DF1 = DF1.merge(
    DF2,
    left_on='Security Number Key',
    right_on='Security_ID',
    how='left'
# 重命名价格列并删掉冗余的Security_ID列
).rename(columns={'Price': 'Current Date Price'}).drop('Security_ID', axis=1)

df.query返回结果不符合预期的原因及修复方法

之前用query返回的是带索引的Series对象,如果一定要用query实现,可以在末尾调用.squeeze()提取标量值:

for k, v in DF1['Security Number Key'].items():
    if v in DF2['Security_ID'].values:
        # 提取单个价格值
        price = DF2.query('Security_ID == @v')['Price'].squeeze()
        DF1.loc[k, 'Current Date Price'] = price

但该方案仍然存在循环,性能远不如前面的矢量化方案,仅作为问题原因说明参考。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:06:10