合并字典和标签

2024-06-16 12:48:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要帮助,以便合并字典和标签

以下是dic

dic = {
    267970: [
        ('species', 'Bean yellow disorder virus'),
        ('genus', 'Crinivirus'),
        ('family', 'Closteroviridae'),
        ('sub_family','Closyerovirinae'),
        ('no_rank', 'ssRNA positive-strand viruses, no DNA stage'), 
        ('no_rank', 'ssRNA viruses'),
        ('superkingdom', 'Viruses')
    ],
    190063: [
        ('species', 'Fowl aviadenovirus C'),
        ('genus', 'Aviadenovirus'),
        ('family', 'Adenoviridae'),
        ('no_rank', 'dsDNA viruses, no RNA stage'),
        ('superkingdom', 'Viruses')
    ]
}

如您所见,在dic中可以有> 1 no_rank信息,因此我想我们应该首先将dic中的no_rank重命名为,在其旁边添加一个数字:

dic = {
    267970: [
        ('species', 'Bean yellow disorder virus'),
        ('genus', 'Crinivirus'),
        ('family', 'Closteroviridae'),
        ('sub_family','Closyerovirinae'),
        ('no_rank1', 'ssRNA positive-strand viruses, no DNA stage'), 
        ('no_rank2', 'ssRNA viruses'),
        ('superkingdom', 'Viruses')
    ],
    190063: [
        ('species', 'Fowl aviadenovirus C'),
        ('genus', 'Aviadenovirus'),
        ('family', 'Adenoviridae'),
        ('no_rank1', 'dsDNA viruses, no RNA stage'),
        ('superkingdom', 'Viruses')
    ]
}

我有一个tab1文件,比如:

Species_names ID
Species1      267970
Species2      190063

我想通过合并dictab1来将dic添加到一个新选项卡中,以获得:

Species_names ID     species                    genus         family          sub_family      no_rank1                                    no_rank2      super_kingdom
Species1      267970 Bean yellow disorder virus Crinivirus    Closteroviridae Closterovirinae ssRNA positive-strand viruses, no DNA stage ssRNA viruses Viruses
Species2      190063 Fowl aviadenovirus C       Aviadenovirus Adenoviridae    NA              dsDNA viruses, no RNA stage                 NA            Viruses

有人有主意吗

在最后一部分,我尝试:

tab1.merge(
    pd.DataFrame.from_dict(dict, orient='index'),
    left_on='ID',
    right_index=True
)

但它不起作用


Tags: nofamilystagespeciesrankyellowbeandic