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

如何不使用for循环从不同DataFrame中匹配满足条件的取值?

解决方案:利用Numpy的searchsorted实现无循环匹配

刚好碰到过类似的场景!因为ext_map['mix']已经是升序排列,我们可以借助Numpy的searchsorted函数高效完成匹配,完全不需要写for循环,效率还很高。

具体实现代码

import pandas as pd
import numpy as np

# 初始化原始数据
df = pd.DataFrame(data={'true': [1, 2, 3], 'billed': [104, 50, 256]})
ext_map = pd.DataFrame(data={'label':[3.1, 2.5, 3.5], 'mix':[100, 200, 300]})

# 用searchsorted定位每个billed对应的匹配位置
match_positions = np.searchsorted(ext_map['mix'], df['billed'], side='left')

# 根据位置提取对应的label值,赋值给新列
df['new_col'] = ext_map['label'].iloc[match_positions].values

print(df)

代码逻辑解释

  • np.searchsorted(ext_map['mix'], df['billed'], side='left'):这个函数专门针对升序列表工作,会为每个billed值找到序列中第一个大于等于它的元素的索引。比如:
    • 50在[100,200,300]里,第一个大于等于它的是100,对应索引0;
    • 104对应的是200,索引1;
    • 256对应的是300,索引2。
  • 拿到这些索引后,直接从ext_map['label']中提取对应值,就能快速生成new_col列。

运行结果

true  billed  new_col
0     1    104      2.5
1     2     50      3.1
2     3    256      3.5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 14:52:44