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

Pandas中基于另一DataFrame高效替换列表列的方法

高效实现Pandas列表元素映射替换

嗨,这个需求很好解决,而且可以用非常高效的方式完成!核心思路是先把第二个DataFrame转成映射字典(字典的键值对查找是O(1)时间复杂度,超快),再批量处理第一个DataFrame里的列表数据。

步骤1:准备示例数据

先把你的两个DataFrame用代码定义出来(方便复现):

import pandas as pd

# 第一个包含列表的DataFrame
df_main = pd.DataFrame({
    'col11': ['X', 'Y', 'Z'],
    'col12': [['A'], ['A', 'B', 'C'], ['C', 'A']]
})

# 用于映射的字典DataFrame
df_mapping = pd.DataFrame({
    'col21': ['A', 'B', 'C'],
    'col22': ['alpha', 'beta', 'gamma']
})

步骤2:创建映射字典

把df_mapping转换成键为col21、值为col22的字典,这一步是提高效率的关键:

# 构建映射关系字典
value_map = df_mapping.set_index('col21')['col22'].to_dict()

现在value_map就是{'A': 'alpha', 'B': 'beta', 'C': 'gamma'},查找速度拉满!

步骤3:批量替换列表元素

用列表推导式处理df_main['col12']里的每个列表,比apply方法快得多(尤其是数据量大的时候):

# 对每个列表中的元素进行映射替换
df_main['col32'] = [[value_map[item] for item in sub_list] for sub_list in df_main['col12']]

步骤4:整理结果格式

重命名列并调整顺序,得到你想要的最终结果:

# 重命名列并筛选需要的列
result_df = df_main.rename(columns={'col11': 'col31'})[['col31', 'col32']]

# 查看结果
print(result_df)

输出结果完全符合你的要求:

col31                  col32
0     X               ['alpha']
1     Y  ['alpha', 'beta', 'gamma']
2     Z        ['gamma', 'alpha']

额外提示:处理异常情况

如果col12里存在df_mapping中没有的元素,直接用value_map[item]会报错。可以改用value_map.get(item, item)来保留原元素,避免报错:

df_main['col32'] = [[value_map.get(item, item) for item in sub_list] for sub_list in df_main['col12']]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:15:11