如何将含重复键列的pandas DataFrame转换为指定键的字典
Pandas DataFrame转字典:处理重复键分组问题
问题描述
需要将Pandas DataFrame转换为字典,指定SITECODE列为键,其他列的值以列表形式对应到每个键,但该键列存在重复值。
示例DataFrame代码:
import pandas as pd df = pd.DataFrame({'SL': ['1', '2', '3', '4', '5'], 'SITECODE': ['CMCND1', 'CPHGN7', 'LXRPR1', 'LXRPR1', 'LXRPR1'], 'TECH': ['3G', '2G', '4G', '3G', '4G'], 'PRIORITY': ['P1', 'P2', 'P2', 'P3', 'P3']})
期望输出(修正原语法错误为合法格式):
{ "CMCND1": [["1", "3G", "P1"]], "CPHGN7": [["2", "2G", "P2"]], "LXRPR1": [["3", "4G", "P2"], ["4", "3G", "P3"], ["5", "4G", "P3"]] }
尝试使用df.set_index('SITECODE').T.to_dict('list')无法得到预期结果,因为该方法无法对重复键进行分组,会直接覆盖重复键的前序值。
解决方案
使用groupby分组后处理每组数据,再转换为字典:
# 按SITECODE分组,处理每组数据并转为字典 result = df.groupby('SITECODE').apply( lambda group: group.drop('SITECODE', axis=1).values.tolist() ).to_dict() # 打印结果 print(result)
执行后输出:
{ 'CMCND1': [['1', '3G', 'P1']], 'CPHGN7': [['2', '2G', 'P2']], 'LXRPR1': [['3', '4G', 'P2'], ['4', '3G', 'P3'], ['5', '4G', 'P3']] }
代码说明
groupby('SITECODE'):将DataFrame按SITECODE列的值分组,相同键的行被归为同一组lambda group: group.drop('SITECODE', axis=1).values.tolist():对每个分组,先移除作为键的SITECODE列,再将剩余列的每一行转换为列表,最终每个分组得到一个包含所有行列表的集合to_dict():将分组后的Series转换为目标字典,键为SITECODE的值,值为对应分组的列表集合
内容的提问来源于stack exchange,提问作者ahmedul Kabir Omi
相关产品推荐
相关产品推荐

