如何将Pandas DataFrame转换为指定格式的嵌套字典?
Pandas DataFrame转指定嵌套字典的实现方法
原始DataFrame结构
首先定义示例中的DataFrame:
import pandas as pd df = pd.DataFrame({ 'id': ['a1', 'a1', 'a1', 'b1', 'b1', 'b1', 'c1', 'c1', 'c1'], 'val': ['ab', 'aa', 'ca', 'cc', 'kf', 'ff', 'wer', 'iid', 'ff'], 'label': ['first', 'second', 'third', 'first', 'second', 'third', 'first', 'second', 'third'] })
转换需求
将上述DataFrame转换为嵌套字典:
- 外层字典以
id列的值为键 - 对应值为嵌套字典,该字典以
label列的值为键,val列的值为集合
目标格式如下:
{ "a1": {"first": {"ab"}, "second": {"aa"}, "third": {"ca"}}, "b1": {"first": {"cc"}, "second": {"kf"}, "third": {"ff"}}, "c1": {"first": {"wer"}, "second": {"iid"}, "third": {"ff"}}, }
实现方法
方法一:GroupBy+嵌套字典推导(简洁健壮)
利用Pandas的groupby分组功能,结合字典推导快速构建目标结构,同时支持同一id+label下多val的场景:
result = { idx: {label: set(vals) for label, vals in group.groupby('label')['val']} for idx, group in df.groupby('id') }
方法二:逐行循环构建(逻辑直观)
如果偏好显式逻辑,可以逐行遍历DataFrame,逐步填充字典:
result = {} for _, row in df.iterrows(): id_val = row['id'] label_val = row['label'] val_val = row['val'] # 初始化外层字典的键 if id_val not in result: result[id_val] = {} # 初始化内层字典的键(空集合) if label_val not in result[id_val]: result[id_val][label_val] = set() # 将val添加到对应集合 result[id_val][label_val].add(val_val)
验证结果
执行上述代码后,打印result即可得到符合要求的嵌套字典:
print(result)
内容的提问来源于stack exchange,提问作者user12314164
相关产品推荐
相关产品推荐

