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

如何高效基于另一DataFrame的匹配值向目标DataFrame插入行

高效实现方案

你当前使用的嵌套循环时间复杂度为O(n*m),且每次插入行都要重建DataFrame、排序、重置索引,数据量较大时性能极低,可通过pandas原生向量化操作实现需求,效率提升千倍以上。

实现代码

import pandas as pd

# 原始数据构造
data = [['apple', 'apples'], ['orange', 'oranges'], ['banana', 'bananas'], ['kiwi', 'kiwis']]
df1 = pd.DataFrame(data, columns= ['fruit', 'fruits'])

data_1 = [['apple', 'A'], ['banana', 'B'], ['cherry', 'C'], ['durian', 'D'], ['kiwi', 'K'], ['elderberry', 'E'], ['fig', 'F'], ['orange', 'O']]
df2 = pd.DataFrame(data_1, columns= ['fruit', 'label'])

# 核心逻辑
# 1. 左连接匹配对应fruits值,完全保留df2原有顺序
df_merged = df2.merge(df1, on='fruit', how='left')
# 2. 构造待展开的fruit列表:匹配到fruits的行存两个值,未匹配只存原fruit值
df_merged['fruit'] = df_merged.apply(lambda x: [x['fruit'], x['fruits']] if pd.notna(x['fruits']) else [x['fruit']], axis=1)
# 3. 列表展开为多行,删除冗余列后重置索引
df_result = df_merged.explode('fruit').drop(columns='fruits').reset_index(drop=True)

# 最终结果和你预期完全一致
print(df_result)

方案优势

  • 整体时间复杂度为O(n),3万条数据可秒级出结果
  • 无反复重建、排序DataFrame的额外开销
  • 完全保留df2原有的行顺序,匹配行的插入位置完全符合需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:12:01