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

Pandas实现列元素映射到另一列对应实际位置的方法问询

实现方案

步骤1:构建对象到真实所属Place的映射

首先建立所有对象和其真实归属位置的查找字典,有两种实现方式可选:

方式1:遍历行实现(逻辑直观)

obj_place_map = {}
for _, row in df.iterrows():
    for obj in row['True position']:
        obj_place_map[obj] = row['Place']

方式2:explode实现(代码更简洁、性能更高)

obj_place_map = df.explode('True position').set_index('True position')['Place'].to_dict()

以上两种方式最终都会得到如下格式的映射字典:{'A':'X1', 'B':'X1', 'C':'X1', 'D':'X2', 'E':'X2', 'F':'X2', 'G':'X3', 'H':'X3'}

步骤2:生成Pos标注列

直接对Position difference列的每个元素遍历查找映射即可,代码如下:

df['Pos'] = df['Position difference'].apply(lambda diff_list: ','.join([obj_place_map[obj] for obj in diff_list]))

运行后即可得到你预期的Pos列结果。

步骤3:扩展实现误检间隔计算

若要计算误检位置和真实位置的间隔,先建立Place对应的位置序号映射,再做差值计算即可,示例代码如下:

# 按实际位置顺序定义Place对应的序号,可根据你的真实位置规则修改
place_order_map = {'X1': 1, 'X2': 2, 'X3': 3}
# 计算每个误检对象的间隔
df['误检间隔'] = df.apply(
    lambda row: [abs(place_order_map[row['Place']] - place_order_map[p]) for p in row['Pos'].split(',')],
    axis=1
)

以X1行为例,最终得到的误检间隔值为[1,1],符合相邻区块间隔为1的需求。


内容的提问来源于stack exchange,提问作者Serge de Gosson de Varennes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:27:02