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

如何用另一DataFrame的别名替换Pandas列表列中的ID

问题需求

我有一个DataFrame,其objects列包含由对象ID组成的列表;另有一个存储对象ID与对应别名的DataFrame。需要将第一个DataFrameobjects列中的ID替换为第二个DataFrame中的别名。

示例数据

第一个DataFrame(待替换)

import pandas as pd

df = pd.DataFrame({'objects': ['', '', '']})
df.objects[0] = []
df.objects[1] = ['2309b0ec-047f-43ef',
                 'a6150d80-49fa-11e9',
                 'c103f8b0-4ac0-11e9',
                 'e8c9db30-4ac0-11e9']
df.objects[2] = ['b14424df-1a46-4e30']

输出:

objects
0                                                 []
1                    [2309b0ec-047f-43ef, a6150d8...
2                               [b14424df-1a46-4e30]

第二个DataFrame(映射关系)

objects = pd.DataFrame({'id': ['2309b0ec-047f-43ef',
                               'a6150d80-49fa-11e9',
                               'c103f8b0-4ac0-11e9',
                               'e8c9db30-4ac0-11e9',
                               'b14424df-1a46-4e30'],
                        'alias': ['first', 'second', 'third', 'fourth', 'fifth']})

输出:

id   alias
0  2309b0ec-047f-43ef   first
1  a6150d80-49fa-11e9  second
2  c103f8b0-4ac0-11e9  third
3  e8c9db30-4ac0-11e9  fourth
4  b14424df-1a46-4e30   fifth

期望输出

objects
0                              []
1  [first, second, third, fourth]
2                         [fifth]

解决方案

方法一:字典映射 + apply 快速替换

  1. 将映射关系DataFrame转换为ID到别名的字典:
id_to_alias = objects.set_index('id')['alias'].to_dict()
  1. 对目标列应用替换逻辑:
df['objects'] = df['objects'].apply(lambda x: [id_to_alias[id] for id in x])

执行后即可得到目标输出,该方法适合ID无缺失的场景,效率较高。

方法二:展开合并再聚合(兼容缺失ID场景)

如果需要处理ID不存在的情况,可通过以下步骤实现:

# 展开列表,生成每行对应一个ID的临时表
temp = df.explode('objects').rename(columns={'objects': 'id'})
# 合并别名,保留原索引
temp = temp.merge(objects, on='id', how='left')
# 按原索引重新聚合成列表
df = temp.groupby(temp.index)['alias'].agg(list).reset_index(name='objects')

此方法会将不存在的ID替换为NaN,可根据需求进一步处理缺失值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 13:07:44