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

如何匹配DataFrame行值与字典并添加对应键为新列

实现DataFrame根据字典值匹配新增列的方法

要实现将DataFrame中User ID与字典值匹配后新增对应组名的需求,可通过以下几种高效方法完成:

方法1:构建反向映射字典(推荐)

原字典结构为组名: [用户ID列表],我们需要先将其转换为用户ID: 组名的反向映射,借助字典O(1)的查询效率快速完成匹配。

import pandas as pd

group_ID = {
    'Group A':[4738, 4812],
    'Group B':[5888, 6551],
    'Group C':[4487, 7888]
}

user_data = [['Alex',4812],['Bob',4487],['Clarke',5888]]
sample_df = pd.DataFrame(user_data,columns=['Name','User ID'])

# 构建反向映射字典
reverse_group = {}
for group_name, id_list in group_ID.items():
    for uid in id_list:
        reverse_group[uid] = group_name

# 新增Group ID列
sample_df['Group ID'] = sample_df['User ID'].map(reverse_group)

print(sample_df)

执行后输出:

Name  User ID Group ID
0    Alex     4812  Group A
1     Bob     4487  Group C
2  Clarke     5888  Group B

这种方法适合处理大数据量的DataFrame,查询效率远高于遍历匹配。

方法2:直接使用replace函数

pandas.Series.replace同样支持字典映射,用法和map一致,效果相同:

# 复用已构建的reverse_group字典
sample_df['Group ID'] = sample_df['User ID'].replace(reverse_group)

方法3:无需构建反向字典的列表推导式

如果不想额外创建反向字典,可通过列表推导式遍历每个User ID并匹配对应组名:

sample_df['Group ID'] = [
    next((group for group, ids in group_ID.items() if uid in ids), None) 
    for uid in sample_df['User ID']
]

其中next(..., None)表示若找不到匹配的ID,就返回None。不过该方法在字典的ID列表较长时,每次匹配都要遍历列表,效率低于前两种,适合小数据量场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 03:40:22