pandas DataFrame两列转字典时重名键存储多个值为列表的实现方法
实现方案
方案1:统一返回列表(推荐)
所有姓名对应的取值都为ID列表,后续处理无需额外判断字段类型,代码最简洁:
name_id_map = df.groupby('fullName')['playerID'].apply(list).to_dict()
该实现直接按fullName分组聚合,自动处理重名逻辑,无需手动编写条件判断和遍历追加逻辑。
方案2:单ID返回字符串、多ID返回列表
如果要求唯一姓名对应的取值为单个ID字符串,仅重名姓名返回ID列表,可对分组结果增加长度判断:
name_id_map = df.groupby('fullName')['playerID'].apply( lambda x: x.iloc[0] if len(x) == 1 else x.tolist() ).to_dict()
效果验证
用以下测试数据运行:
import pandas as pd df = pd.DataFrame({ 'fullName': ['John Williams', 'John Williams', 'Li Ming'], 'playerID': ['williamsjo01', 'williamsjo02', 'mingli01'] })
方案1输出结果:
{'John Williams': ['williamsjo01', 'williamsjo02'], 'Li Ming': ['mingli01']}
方案2输出结果:
{'John Williams': ['williamsjo01', 'williamsjo02'], 'Li Ming': 'mingli01'}
内容的提问来源于stack exchange,提问作者vu2
相关产品推荐
相关产品推荐

