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

求助:基于DataFrame索引匹配列值,生成目标新列

如何根据另一DataFrame的索引匹配添加对应列?

我来帮你搞定这个问题!你需要的是用df2里的idx列作为df1的实际索引,来匹配获取对应的score值对吧?先来看你的示例数据:

import pandas as pd

df1 = pd.DataFrame({'cluster':[1,2,3,4,5], 'score':[80, 90, 60, 40, 12]})
df2 = pd.DataFrame({'word':["hello", "my", "name", "is", "tom"], 'label':["aa", "bb", "cc", "dd", "ee"], 'idx':[1,3,4,4,4]})

你的需求是生成包含score列的df3,其中score值由df2的idx匹配df1的索引得到——比如df2里idx=1对应df1索引为1的行,score就是90,完全符合你给出的期望结果。

最简单的解决方案:用map方法

直接利用Pandas Series的索引匹配特性,一行代码就能搞定:

# 给df2添加score列
df2['score'] = df2['idx'].map(df1['score'])

# 输出结果就是你要的df3
print(df2)

运行这段代码后,你会得到:

word label  idx  score
0  hello    aa    1     90
1    my    bb    3     40
2  name    cc    4     12
3    is    dd    4     12
4   tom    ee    4     12

原理说明

df1['score']是一个Series,它的默认索引就是0,1,2,3,4。当你用df2['idx'].map()去匹配这个Series时,Pandas会自动把df2里的idx值当作索引,去取对应的score值,完美契合你的需求。

备选方案:用merge方法(适合复杂场景)

如果后续有更复杂的匹配需求,也可以先把df1的索引转成列,再用merge来关联:

# 把df1的索引转为名为idx的列
df1_with_idx = df1.reset_index().rename(columns={'index':'idx'})
# 左连接df2和df1的idx、score列
df3 = pd.merge(df2, df1_with_idx[['idx', 'score']], on='idx', how='left')

这个方法也能得到完全一致的结果,适合需要多列关联的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:56:28