有人能解释一下我在用Python将这个数据帧转换成字典时做了什么吗
有人能帮我把上面的数据框转换成下面的嵌套字典吗?在这里,集群成为主键,print_type_x作为键,然后是下面预期输出中显示的值有人能解释一下我在用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
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}}}