有人能解释一下我在用Python将这个数据帧转换成字典时做了什么吗

有人能解释一下我在用Python将这个数据帧转换成字典时做了什么吗,python,pandas,dataframe,dictionary,nested,Python,Pandas,Dataframe,Dictionary,Nested,有人能帮我把上面的数据框转换成下面的嵌套字典吗?在这里,集群成为主键,print_type_x作为键,然后是下面预期输出中显示的值 index print_type_solid print_type_floral cluster A 10 10 2 B 20 20 2 A

有人能帮我把上面的数据框转换成下面的嵌套字典吗?在这里,集群成为主键,print_type_x作为键,然后是下面预期输出中显示的值

index      print_type_solid      print_type_floral  cluster
     A           10                     10            2
     B           20                     20            2
     A           10                     10            3
     B           20                     20            3
     C           25                     30            3

我试过这个:

 {  
 "2" :{
        "print_type_solid" : {
          "A": 10,
          "B": 20
                            },
        "print_type_floral" : {
            "A": 10,
            "B": 20
                             }
        },

"3" :{
        "print_type_solid" : {
          "A": 10,
          "B": 20,
          "C": 25,
                            },
        "print_type_floral" : {
            "A": 10,
            "B": 20,
            "C": 30,
                             }
        }

}
但我明白了:

from collections import defaultdict
d = defaultdict()
d2={}


for k1, s in dct.items():
    for k2, v in s.items():
        for k3, r in v.items():
            d.setdefault(k3, {})[k2] = r

    d2[k1]=d

这是错误的,因为我在集群2的字典中也得到了C。

您可以使用
df.iterrows()
逐行迭代数据帧。要创建词典,可以使用以下方法:

 {  
 "2" :{
        "print_type_solid" : {
          "A": 10,
          "B": 20,
          "C": 25
                            },
        "print_type_floral" : {
            "A": 10,
            "B": 20,
            "C": 30
                             }
        },

"3" :{
        "print_type_solid" : {
          "A": 10,
          "B": 20,
          "C": 25,
                            },
        "print_type_floral" : {
            "A": 10,
            "B": 20,
            "C": 30,
                             }
        }

}
输出:

import pandas as pd

df = pd.DataFrame( {"index":list("ABABC"),
                    "print_type_solid":[10,20,10,20,25],
                    "print_type_floral":[10,20,10,20,30],
                    "cluster":[2,2,3,3,3] }) 

print(df)

d = {}
pts = "print_type_solid"
ptf = "print_type_floral"

for idx, row in df.iterrows():
    key = d.setdefault(row["cluster"],{})

    key_pts = key.setdefault(pts,{})
    key_pts[row["index"]] = row[pts]

    key_ptf = key.setdefault(ptf,{})
    key_ptf[row["index"]] = row[ptf]


from pprint import pprint
pprint(d)

您也可以使用集合。defaultdict-但是对于这几个数据点,这是不需要的。

您尝试做什么?为什么要使用defaultdict和setdefault?为什么不是默认的dict(dict)?你知道默认dicts是如何工作的吗?
# df
  index  print_type_solid  print_type_floral  cluster
0     A                10                 10        2
1     B                20                 20        2
2     A                10                 10        3
3     B                20                 20        3
4     C                25                 30        3

# dict
{2: {'print_type_floral': {'A': 10, 'B': 20},
     'print_type_solid':  {'A': 10, 'B': 20}},
 3: {'print_type_floral': {'A': 10, 'B': 20, 'C': 30},
     'print_type_solid':  {'A': 10, 'B': 20, 'C': 25}}}