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

如何将Pandas DataFrame转换为可切片的字典?

解决方案

要实现你需要的字典访问效果,原生的df.to_dict()无法满足分组聚合的需求,我们可以通过分组处理+自定义类来实现:

步骤1:按id分组并生成字典列表

先将DataFrame按id分组,把每个组转换为目标格式的字典,存入列表:

import pandas as pd

data = [[1, 'Jack', 'A'], [1, 'Jamie', 'A'], [1, 'Mo', 'B'], [1, 'Tammy', 'A'], [2, 'JJ', 'A'], [2, 'Perry', 'C']]
df = pd.DataFrame(data, columns=['id', 'name', 'class'])

# 按id分组,构造每个分组的目标字典
grouped_list = []
for _, group in df.groupby('id'):
    grouped_dict = {
        'id': str(group['id'].iloc[0]),  # 转为字符串匹配示例格式
        'name': group['name'].tolist(),
        'class': group['class'].tolist()
    }
    grouped_list.append(grouped_dict)

步骤2:自定义类实现索引与切片访问

通过自定义类重写__getitem__方法,区分单个索引和切片请求,返回对应格式的结果:

class CustomDict:
    def __init__(self, data):
        self.data = data
    
    def __getitem__(self, key):
        if isinstance(key, slice):
            # 处理切片,整合所有分组的对应字段
            sliced_items = self.data[key]
            return {
                'id': [item['id'] for item in sliced_items],
                'name': [item['name'] for item in sliced_items],
                'class': [item['class'] for item in sliced_items]
            }
        else:
            # 处理单个索引,直接返回对应分组的字典
            return self.data[key]

# 初始化自定义字典
mydict = CustomDict(grouped_list)

验证效果

# 访问单个分组
print(mydict[0])
# 输出: {'id': '1', 'name': ['Jack', 'Jamie', 'Mo', 'Tammy'], 'class': ['A', 'A', 'B', 'A']}

print(mydict[1])
# 输出: {'id': '2', 'name': ['JJ', 'Perry'], 'class': ['A', 'C']}

# 切片访问多个分组
print(mydict[0:2])
# 输出: {'id': ['1', '2'], 'name': [['Jack', 'Jamie', 'Mo', 'Tammy'], ['JJ', 'Perry']], 'class': [['A', 'A', 'B', 'A'], ['A', 'C']]}

说明

  • 先通过groupby完成分组聚合,手动构造每个分组的目标字典结构,解决原生to_dict无法按分组聚合的问题。
  • 自定义CustomDict类通过__getitem__方法适配两种访问场景,完全匹配你需要的输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 01:08:15