gpt4 book ai didi

python - 如何在 Pandas 中使用具有多索引的 map ?

转载 作者:太空狗 更新时间:2023-10-29 18:28:37 30 4
gpt4 key购买 nike

我有一个包含各种基因组位置数据的数据表。这些位置表示为 3 元组('chromosome'、'srand'、position),我已将其转换为多索引。我的目标是查找有关每个位置的各种信息并将其添加到表中(例如基因名称等)我可以使用 pybedtools 完成此操作。

df = pd.DataFrame(data={'A':range(1,8), 'B':range(1,8), 'C': range(1,8)},
index=pd.MultiIndex.from_tuples([('chrom1', '-', 1234), ('chrom1', '+', 5678),
('chrom1', '+', 9876), ('chrom2', '+', 13579), ('chrom2', '+', 8497), ('chrom2', '-', 98765),
('chrom2', '-', 76856)]))

df.index.rename(['chrom','strand','abs_pos'], inplace=True)

A B C
chrom strand abs_pos
chrom1 - 1234 1 1 1
+ 5678 2 2 2
9876 3 3 3
chrom2 + 13579 4 4 4
8497 5 5 5
- 98765 6 6 6
76856 7 7 7

我的问题是向具有多索引的数据框添加列。这看起来很简单,没有多索引:pandas - add new column to dataframe from dictionary

我有一个查找信息的字典,其中包含与多索引对应的三元组键。如何将此数据添加为新列?

gene_d = {('chrom1', '-', 1234) : 'geneA', ('chrom1', '+', 5678): 'geneB', 
('chrom1', '+', 9876): 'geneC', ('chrom2', '+', 13579): 'geneD',
('chrom2', '+', 8497): 'geneE', ('chrom2', '-', 98765): 'geneF',
('chrom2', '-', 76856): 'geneG'}

我试过 map ,但似乎无法弄清楚如何让它与多索引一起工作以产生以下结果:

                                A  B  C
chrom strand abs_pos gene
chrom1 - 1234 geneA 1 1 1
+ 5678 geneB 2 2 2
9876 geneC 3 3 3
chrom2 + 13579 geneD 4 4 4
8497 geneE 5 5 5
- 98765 geneF 6 6 6
76856 geneG 7 7 7

最佳答案

矢量化方法:

df['gene'] = df.index #you get the index as tuple
df['gene'] = df['gene'].map(gene_d)
df = df.set_index('gene', append=True)

结果 df:

                                A   B   C
chrom strand abs_pos gene
chrom1 - 1234 geneA 1 1 1
+ 5678 geneB 2 2 2
9876 geneC 3 3 3
chrom2 + 13579 geneD 4 4 4
8497 geneE 5 5 5
- 98765 geneF 6 6 6
76856 geneG 7 7 7

关于python - 如何在 Pandas 中使用具有多索引的 map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43077729/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com