如何将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
相关产品推荐
相关产品推荐

