python - 拥有熊猫数据框,条件后输出特定列
问题描述
我有一个熊猫数据框,其中第一列包含细菌基因组(名称)。另一方面,我有一本字典,其中的键中有未知的细菌名称,值中有我知道的细菌,这些值在我的数据框中。
我想创建一个新数据框,其中一列中包含未知名称,然后是第二列中的已知名称以及前一个数据框的某些列。最好看例子。
我的
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 列作为输出。
从生物学上讲,我想在我未知的细菌群和我的已知群之间建立联系。
我花了很多时间尝试这个,但我不知道该怎么做。
你能给我一些建议吗?
解决方案
我首先将 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
推荐阅读
- http - 从 URL 中删除空键安全吗?
- java - 使用随机键检索 Firebase 数据
- c++ - C++ - 未声明的标识符/'FUNCTION'的左侧必须有类/结构/联合
- wso2 - WS02 IS 能否提供兼容 ADFS 的 IDP?
- javascript - JavaScript 减少有/没有初始值的行为
- javascript - d3js v5 x轴条形图
- python - dask groupby 不合并分区
- mysql - 由于caching_sha2_password,MySQL 8.0.11 连接错误
- python - 排序具有不同 Y 的轮廓
- ruby-on-rails - 使用来自 javascript 的 turbolinks 提交表单