从数据框到嵌套字典
From dataframe to a nested dictionary
我在尝试从 python 中的数据框创建嵌套字典时遇到了一些困难,非常感谢您的 help.This 是数据的样子。
tag
id
cat
0
PA14_00030
GO:0005524
F
1
PA14_00030
GO:0006281
P
2
PA14_00050
GO:0003677
F
3
PA14_00050
GO:0003918
F
4
PA14_00050
GO:0005524
F
5
PA14_00050
GO:0006265
P
6
PA14_00060
GO:0016746
F
7
PA14_00070
GO:0005975
C
8
PA14_00080
GO:0009055
C
我想创建一个如下所示的嵌套字典:
{'C':{'PA14_00080':{'GO:0009055'},'PA14_00070':{'GO:0005975'}},
'F':{'PA14_0003': {'GO:0005524'}, 'PA14_00050': {'GO:0003677', 'GO:0003918','GO:0005524'}},
'P':{PA14_00050:{GO:0006265}, PA14_00030:{GO:0006281}}}
感谢您的帮助。
如果我理解正确的话,你可以这样做:
out = {
k: {
row["tag"]: set(g.loc[g["tag"] == row["tag"], "id"].to_list())
for _, row in g.iterrows()
}
for k, g in df.groupby("cat")
}
print(out)
打印:
{
"C": {"PA14_00070": {"GO:0005975"}, "PA14_00080": {"GO:0009055"}},
"F": {
"PA14_00030": {"GO:0005524"},
"PA14_00050": {"GO:0003918", "GO:0005524", "GO:0003677"},
"PA14_00060": {"GO:0016746"},
},
"P": {"PA14_00030": {"GO:0006281"}, "PA14_00050": {"GO:0006265"}},
}
我在尝试从 python 中的数据框创建嵌套字典时遇到了一些困难,非常感谢您的 help.This 是数据的样子。
tag | id | cat | |
---|---|---|---|
0 | PA14_00030 | GO:0005524 | F |
1 | PA14_00030 | GO:0006281 | P |
2 | PA14_00050 | GO:0003677 | F |
3 | PA14_00050 | GO:0003918 | F |
4 | PA14_00050 | GO:0005524 | F |
5 | PA14_00050 | GO:0006265 | P |
6 | PA14_00060 | GO:0016746 | F |
7 | PA14_00070 | GO:0005975 | C |
8 | PA14_00080 | GO:0009055 | C |
我想创建一个如下所示的嵌套字典:
{'C':{'PA14_00080':{'GO:0009055'},'PA14_00070':{'GO:0005975'}},
'F':{'PA14_0003': {'GO:0005524'}, 'PA14_00050': {'GO:0003677', 'GO:0003918','GO:0005524'}},
'P':{PA14_00050:{GO:0006265}, PA14_00030:{GO:0006281}}}
感谢您的帮助。
如果我理解正确的话,你可以这样做:
out = {
k: {
row["tag"]: set(g.loc[g["tag"] == row["tag"], "id"].to_list())
for _, row in g.iterrows()
}
for k, g in df.groupby("cat")
}
print(out)
打印:
{
"C": {"PA14_00070": {"GO:0005975"}, "PA14_00080": {"GO:0009055"}},
"F": {
"PA14_00030": {"GO:0005524"},
"PA14_00050": {"GO:0003918", "GO:0005524", "GO:0003677"},
"PA14_00060": {"GO:0016746"},
},
"P": {"PA14_00030": {"GO:0006281"}, "PA14_00050": {"GO:0006265"}},
}