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

如何将含重复键列的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 13:35:11