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

如何在同一DataFrame中匹配行列值并生成new_obj_id新列

解决DataFrame生成new_obj_id列的问题

原始DataFrame结构

obj_idColumn BColumn C
a1catbat
a2batman
r1manapple
r2applecat

需求与预期结果

需要新增new_obj_id列,结合预期结果,实际规则应为:当前行Column C的值与某行的Column B值匹配时,new_obj_id取该行的obj_id,最终预期结果如下:

obj_idColumn BColumn Cnew_obj_id
a1catbata2
a2batmanr1
r1manappler2
r2applecata1

原代码的问题

你提供的代码存在两处关键错误:

dataframe1['new_obj_id'] = dataframe1.apply(lambda x: x['obj_id'] 
                           if x['Column_B'] in x['Column C']
                           else 'none', axis=1)
  1. 列名错误:原始DataFrame的列是Column B(带空格),但代码中写的是Column_B(下划线),会导致无法正确取值。
  2. 逻辑完全偏离需求:代码判断的是当前行的Column_B值是否是当前行Column C值的子字符串,而不是在整个DataFrame中找到与当前行值匹配的其他行,并获取其obj_id。

正确解决方案

我们可以通过创建映射字典的方式高效实现需求,代码如下:

# 创建Column B到obj_id的映射字典
b_to_obj = df.set_index('Column B')['obj_id'].to_dict()

# 生成new_obj_id列:用Column C的值去匹配映射字典
df['new_obj_id'] = df['Column C'].map(b_to_obj)

代码解释

  1. df.set_index('Column B')['obj_id'].to_dict():将Column B的每个值作为键,对应的obj_id作为值,生成字典{'cat': 'a1', 'bat': 'a2', 'man': 'r1', 'apple': 'r2'}。
  2. df['Column C'].map(b_to_obj):遍历每行的Column C值,用映射字典找到对应的obj_id,直接生成new_obj_id列,完全符合预期结果。

如果严格按照你文字描述的需求(当前行Column B的值匹配某行Column C值时取该行obj_id),只需将映射逻辑调换:

c_to_obj = df.set_index('Column C')['obj_id'].to_dict()
df['new_obj_id'] = df['Column B'].map(c_to_obj)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 06:24:35