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

如何高效用DataFrame2按规则更新DataFrame1?现有.loc/.iloc方案效率低

高效批量更新DataFrame的解决方案

这个问题的核心是把df2的内容按特定的行列映射规则批量更新到df1,避免逐元素操作的低效。先明确你给出的替换规则:

  • df2的行102(item x=az, item y=ez)对应更新df1的Item n列:ez替换A行的aa,az替换B行的bb
  • df2的行256(item x=fafa, item y=foo)对应更新df1的item n+1列:foo替换A行的aaa,fafa替换B行的bbb

本质上是把df2的指定行,按[item y, item x]的顺序映射到df1指定列的[A, B]行。下面是一个高效的向量式解决方案,比循环或多次.loc/.iloc操作快得多:

代码实现

首先明确两个关键映射列表:

  • target_cols:df1中需要被更新的列名,顺序要和df2的目标行对应
  • source_rows:df2中提供更新数据的行索引,顺序要和df1的目标列对应
import pandas as pd

# 假设你的df1和df2已经初始化完成
target_cols = ['Item n', 'item n+1']
source_rows = [102, 256]

# 构造用于更新的临时DataFrame
update_data = df2.loc[source_rows, ['item y', 'item x']]
# 匹配df1的目标行索引
update_data.index = ['A', 'B']
# 匹配df1的目标列名
update_data.columns = target_cols

# 批量更新df1
df1.update(update_data)

方法优势

  • 向量化操作:完全利用pandas的内置批量处理能力,避免了逐元素的索引调用,处理大数据集时速度提升非常明显
  • 可读性强:通过明确的映射列表和临时DataFrame,逻辑清晰易懂,后续维护或扩展更方便
  • 灵活扩展:如果需要更新更多列或行,只需调整target_cols和source_rows的内容即可,无需修改核心逻辑

内容的提问来源于stack exchange,提问作者Jean-Francois

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:24:46