如何用Python Pandas基于字典键创建列并按列表匹配赋值?
给DataFrame新增匹配字典映射的Group列
需求说明
给定映射字典:
{'A':['John','Mark','Jane'],'B':['Mike','Rob','James']}
和初始DataFrame:
| Name | x | y |
|---|---|---|
| John | --- | --- |
| Jane | --- | --- |
| Rob | --- | --- |
需要新增Group列,根据Name值匹配字典内的列表元素,填充对应的字典键,最终得到目标DataFrame。
解决步骤
1. 转换字典映射结构
原字典是组名: 成员列表的形式,我们需要先转换成成员: 组名的一对一映射,这样能快速查找每个Name对应的Group:
group_dict = {'A':['John','Mark','Jane'],'B':['Mike','Rob','James']} # 转换为成员到组名的映射 name_group_map = {} for group, members in group_dict.items(): for member in members: name_group_map[member] = group
转换后的映射结构为:
{'John': 'A', 'Mark': 'A', 'Jane': 'A', 'Mike': 'B', 'Rob': 'B', 'James': 'B'}
2. 给DataFrame添加Group列
使用pandas的map()方法,将Name列的值映射到对应的组名:
import pandas as pd # 构建初始DataFrame df = pd.DataFrame({ 'Name': ['John', 'Jane', 'Rob'], 'x': ['---', '---', '---'], 'y': ['---', '---', '---'] }) # 新增Group列 df['Group'] = df['Name'].map(name_group_map)
最终结果
执行后得到的DataFrame:
| Name | x | y | Group |
|---|---|---|---|
| John | --- | --- | A |
| Jane | --- | --- | A |
| Rob | --- | --- | B |
简化写法
可以用字典推导式一行完成字典转换:
name_group_map = {member: group for group, members in group_dict.items() for member in members}
内容的提问来源于stack exchange,提问作者bblackburn
相关产品推荐
相关产品推荐

