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

基于Pandas默认索引实现两个数据集的搜索替换方法

基于Pandas默认索引实现跨数据集的值替换

我来帮你解决这个问题,核心思路是把df1里的每个值当作df2的默认索引,提取df2对应位置的数值来替换,下面是具体实现步骤:

1. 先还原你的数据集

首先我们先创建出你描述的两个DataFrame:

import pandas as pd

# 构建df1
df1 = pd.DataFrame({
    'id1': [1, 3],
    'id2': [2, 4],
    'id3': [3, 5],
    'id4': [4, 6]
})

# 构建df2
df2 = pd.DataFrame({
    'id_df2': [500, 1000, 2000, 3000, 4000, 5000, 6000]
})

2. 两种高效的替换方法

方法一:用replace配合字典映射(推荐,适合大数据集)

我们可以把df2转换成「索引: 对应值」的字典,然后用Pandas的replace方法批量替换df1里的所有匹配值:

# 将df2的默认索引和id_df2列转换为字典
mapping = df2['id_df2'].to_dict()
# 执行替换
result = df1.replace(mapping)

运行后得到的结果:

id1   id2   id3   id4
0  1000  2000  3000  4000
1  3000  4000  5000  6000

方法二:用applymap逐元素映射(逻辑直观,适合小数据集)

如果你想更直观地看到逐元素的替换逻辑,可以用applymap遍历df1的每个元素,从df2中提取对应索引的值:

result = df1.applymap(lambda x: df2['id_df2'].iloc[x])

这个方法和方法一得到的结果完全一致,只是对于大规模数据来说,性能会比replace稍差一些。

补充说明

你给出的期望结果里最后一个值是5000,这应该是笔误(因为df1里的6对应df2索引6的6000),如果确实需要把6替换成5000,可以在映射字典里单独修改:

mapping[6] = 5000
result = df1.replace(mapping)

这样就能得到你想要的最终结果了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 19:23:12