从数据框到嵌套字典

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"}},
}