求助:基于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
相关产品推荐
相关产品推荐

