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

如何用Pandas高效将df_matrix数据按索引填入df_main的depth列?

高效批量匹配矩阵值到主数据框的Pandas方案

场景说明

现有一个以整数为行/列索引的矩阵数据框df_matrix(示例shape为(4,5),实际规模更大),以及包含row_i、col_i列的主数据框df_main,需要将df_matrix中对应row_i和col_i位置的值填充到df_main的depth列。当前使用iterrows循环实现时,处理20万+行数据速度极慢,需替换为高效的Pandas原生方法。

高效实现方案

方案1:矩阵转长格式后合并(直观通用)

将宽格式的df_matrix转换为包含row_i、col_i、depth的长格式数据框,再通过merge与df_main匹配:

# 转换矩阵为长格式
df_matrix_long = df_matrix.reset_index().melt(
    id_vars='index', 
    var_name='col_i', 
    value_name='depth'
).rename(columns={'index': 'row_i'})
# 将col_i转为整数(melt后默认是字符串类型)
df_matrix_long['col_i'] = df_matrix_long['col_i'].astype(int)

# 合并到主数据框,保留原有所有行
df_main = df_main.merge(df_matrix_long, on=['row_i', 'col_i'], how='left')

方案2:使用Pandas lookup方法(简洁专用)

Pandas的lookup方法专门用于根据行列索引批量提取值,代码简洁高效:

df_main['depth'] = df_matrix.lookup(df_main['row_i'], df_main['col_i'])

注意:该方法在Pandas 1.2+版本中被标记为弃用,后续版本建议使用方案3。

方案3:Numpy向量化索引(性能最优)

直接操作底层Numpy数组进行向量化索引,是大数据量下速度最快的方案:

# 利用numpy数组的行列索引直接取值
df_main['depth'] = df_matrix.values[df_main['row_i'], df_main['col_i']]

方案对比

  • 方案1:逻辑直观,适合需要保留长格式矩阵做后续处理的场景,性能远优于iterrows,但略逊于后两种方案。
  • 方案2:代码最简洁,但存在版本弃用风险。
  • 方案3:完全向量化操作,性能最优,适合20万+行的大规模数据处理,推荐优先使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 03:09:53