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

如何高效为temp DataFrame匹配同10列对应的ID(大数据量优化)

问题描述

我有两个DataFrame:

apparentTemperature_id 结构

idapparentTemperatureapparentTemperatureMin...
1139...
24840...
33224...
............

temp 结构

apparentTemperatureapparentTemperatureMin...
3224...
139...
3224...
.........

当前使用的代码如下:

temp = pd.concat([apparentTemperature_df, temperature_df], axis=1)
temp_list = []

for i in range (len(temp)):
    for k in range (len(apparentTemperature_id)):
        if temp.iloc[i,0:9].equals(apparentTemperature_id.iloc[k,1:10]):
            temp_list.append(apparentTemperature_id.iloc[k,0])
            break

需求是根据apparentTemperature_id为temp数据分配对应的ID,要求完全匹配共10列数据。但数据量达60万+行,ID有1000+个,上述代码运行耗时极长,求更高效的实现方式?


高效解决方案

直接使用pandas内置的merge方法,这是专门为DataFrame匹配合并设计的向量化操作,相比嵌套循环效率提升几个数量级:

步骤说明

  1. 对齐匹配列名:确保apparentTemperature_id中除id外的10列,和temp中的10列列名完全一致(如果列名不同,先使用rename方法统一)。
  2. 执行合并操作:
# 提取用于匹配的列(除id外的所有列)
merge_columns = [col for col in apparentTemperature_id.columns if col != 'id']
# 或者直接指定10列的列名列表,比如:
# merge_columns = ['apparentTemperature', 'apparentTemperatureMin', ...]

# 左合并:保留temp的所有行,匹配对应的id
result_df = temp.merge(apparentTemperature_id, on=merge_columns, how='left')

执行后,result_df就是temp数据加上匹配到的id列,完全替代原嵌套循环的逻辑。

效率优势

  • merge底层基于C实现哈希匹配,避免了Python层面的循环开销,处理60万行数据基本秒级完成。
  • 自动批量处理所有匹配,无需手动遍历每一行和ID。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 21:35:16