我有各种基因组位置的数据数据表.这些位置表示为3元组('染色体','srand',位置),我已经变成了多指数.我的目标是查找有关每个位置的各种信息并将其添加到表中(例如基因名称等)我可以使用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
Run Code Online (Sandbox Code Playgroud)
我的问题是向具有多索引的数据框添加列.这似乎很简单,没有多索引:pandas - 从字典向数据框添加新列
我有一个查找信息的字典,其中包含与多索引相对应的3元组键.如何将此数据添加为新列?
gene_d = {('chrom1', '-', 1234) …Run Code Online (Sandbox Code Playgroud) 我有一个带有多索引的数据表.多指数的所述第一电平是对应于给定序列(DNA)的名称,多指数的所述第二电平对应于一个特定类型的序列变体的wt,m1,m2,m3在下面的例子.并非所有给定wt序列都具有所有类型的变体(参见seqA和seqC下文).
df = pd.DataFrame(data={'A':range(1,9), 'B':range(1,9), 'C': range(1,9)},
index=pd.MultiIndex.from_tuples([('seqA', 'wt'), ('seqA', 'm1'),
('seqA', 'm2'), ('seqB', 'wt'), ('seqB', 'm1'), ('seqB', 'm2'),
('seqB', 'm3'), ('seqC', 'wt') ]))
df.index.rename(['seq_name','type'], inplace=True)
print df
A B C
seq_name type
seqA wt 1 1 1
m1 2 2 2
m2 3 3 3
seqB wt 4 4 4
m1 5 5 5
m2 6 6 6
m3 7 7 7
seqC wt 8 …Run Code Online (Sandbox Code Playgroud) 编辑以澄清输入/输出。我认为无论如何这都会有点慢,但到目前为止我还没有真正考虑过我的 python 脚本的速度,并且我正在尝试找出加速此类操作的方法。
我的输入是基因组序列的腌制字典。我目前正在处理两个基因组,即芽殖酵母基因组(磁盘上 11.5 MB)和人类基因组(磁盘上 2.8 GB)。这些字典的形式如下:
seq_d = { 'chr1' : 'ATCGCTCGCTGCTCGCT', 'chr2' : 'CGATCAGTCATGCATGCAT',
'chr3' : 'ACTCATCATCATCATACTGGC' }
Run Code Online (Sandbox Code Playgroud)
我想找到基因组两条链中核苷酸的所有单碱基实例。其中+strand指的是上述字典中的序列,strand-是序列的反向补集。我的输出是一个嵌套字典,其中顶层keys是+or -,嵌套的keys是染色体名称,值是 0 索引位置的列表:
nts = 'T'
test_d = {'+': {'chr3': [2, 5, 8, 11, 14, 17], 'chr2': [3, 7, 10, 14, 18],
'chr1': [1, 5, 9, 12, 16]}, '-': {'chr3': [0, 4, 7, 10, 13, 15],
'chr2': [2, 5, 9, 13, 17], 'chr1': [0]}}
Run Code Online (Sandbox Code Playgroud)
test_d稍后在脚本中定义一组要在大型 Illumina …