首页 > 解决方案 > 拥有熊猫数据框,条件后输出特定列

问题描述

我有一个熊猫数据框,其中第一列包含细菌基因组(名称)。另一方面,我有一本字典,其中的键中有未知的细菌名称,值中有我知道的细菌,这些值在我的数据框中。

我想创建一个新数据框,其中一列中包含未知名称,然后是第二列中的已知名称以及前一个数据框的某些列。最好看例子。

我的

accession                  phylum           class       order          genus
1   bacteriaA   p__Firmicutes   c__Bacilli  o__Lactobacillales  g__Enterococcus
2   BacteriaB   p__Proteobacteria   c__Gammaproteobacteria  o__Pseudomonadales  g__Acinetobacter

我的听写

{'GCF_001999625.1': ['bacteriaA'],
 'GCA_000307585.2': ['BacteriaC', 'BacteriaJ', 'BacteriaK'],
 'GCA_000404785.1': ['BacteriaB','BacteriaBP']}


我怎么能创造这样的东西

unknown              accession.       phylum            class       order          genus
1   GCF_001999625.1 bacteriaA p__Firmicutes c__Bacilli  o__Lactobacillales  g__Enterococcus
2   GCA_000404785.1 BacteriaB p__Proteobacteria c__Gammaproteobacteria  o__Pseudomonadales  g__Acinetobacter

基本上,我不走运的是引入查询并以可理解的方式获得 4 列作为输出。

从生物学上讲,我想在我未知的细菌群和我的已知群之间建立联系。

我花了很多时间尝试这个,但我不知道该怎么做。

你能给我一些建议吗?

标签: pythonpandasdataframe

解决方案


我首先将 dict 转换为具有 2 列的 DataFrame:未知名称和 Bacteria,然后将内部合并到初始 DataFrame 中:

data = {'GCF_001999625.1': ['bacteriaA'],
 'GCA_000307585.2': ['BacteriaC', 'BacteriaJ', 'BacteriaK'],
 'GCA_000404785.1': ['BacteriaB','BacteriaBP']}

unk = pd.DataFrame([[k,j] for k, v in data.items() for j in v],
                   columns = ['unknown', 'accession'])

resul = unk.merge(df, on='accession')

resul正如预期的那样:

           unknown  accession             phylum                   class               order             genus
0  GCF_001999625.1  bacteriaA      p__Firmicutes              c__Bacilli  o__Lactobacillales   g__Enterococcus
1  GCA_000404785.1  BacteriaB  p__Proteobacteria  c__Gammaproteobacteria  o__Pseudomonadales  g__Acinetobacter

推荐阅读