我有一本字典(在python中),其中的键是动物名,值是包含基因名的集合。并非所有动物都具有所有基因。
大约有108个基因(我列出了其中的一个)和15种。所有动物共有28个基因。

我想为每个动物和每个基因绘制一个动物中基因的存在情况。
例如:

d = {'dog': {'tnfa', 'tlr1'}, 'cat': {'myd88', 'tnfa', 'map2k2'}}


我想要的情节看起来像这样:

        dog    cat
tnfa     x      x
myd88           x
tlr1     x
map2k2          x


如果我也可以将基因数量最多的动物归为一类,那就太好了。但这是可选的。

您对我可以采取的方法有什么建议吗?

最佳答案

让我们尝试一下:

d = {'dog': {'tnfa', 'tlr1'}, 'cat': {'myd88', 'tnfa'}}

df = pd.DataFrame.from_dict(d, orient='index')

df.stack().reset_index()\
  .drop('level_1',axis=1).assign(Value='x')\
  .set_index([0,'level_0'])['Value']\
  .unstack().rename_axis('gene')\
  .rename_axis('animal', 1)


输出:

animal   cat   dog
gene
myd88      x  None
tlr1    None     x
tnfa       x     x

10-08 11:57