如何用pandas的isin函数获取匹配行实际值而非布尔结果?
解决DataFrame匹配B列并提取对应C列值的问题
你现在需要的是根据B列的匹配关系,将df2的C列对应值映射到df1的新列中,而isin只能返回布尔值,没法拿到实际的C值。这里给你两个实用的解决方法:
方法1:用merge合并(推荐)
这是pandas处理这类关联匹配的标准方式,直接根据B列把两个DataFrame合并,提取需要的C列:
# 筛选df2的B、C列,以B为键左合并到df1,并重命名列 df1 = df1.merge(df2[['B', 'C']], on='B', how='left').rename(columns={'C': 'New'})
df2[['B', 'C']]先挑出需要的列,避免合并多余数据how='left'保证df1的所有行都保留,没匹配到的行New列会填NaN- 最后用
rename把合并过来的C列改成你要的New
方法2:用map映射
如果df2的B列没有重复值(每个B对应唯一的C),可以用map快速映射:
# 把df2转成B:C的映射关系,再匹配到df1的B列 df1['New'] = df1['B'].map(df2.set_index('B')['C'])
df2.set_index('B')['C']会生成一个以B为索引、C为值的Series,相当于字典map会自动根据df1的B值匹配对应的C值,没匹配到的返回NaN
两种方法的区别
- 如果df2的B列有重复值,
merge会返回所有匹配结果(可能让df1行数变多),map只会取最后一个匹配的C值 - 一对一匹配场景下两种方法都能用;一对多场景优先选
merge
内容的提问来源于stack exchange,提问作者curd_C
相关产品推荐
相关产品推荐

