Pandas Dataframe to Dictionary with Multiple Keys

时间:2014-06-10 17:26:54

标签: python r dictionary pandas nested

我目前正在使用由13个字母字符串('13mer')和ID代码('Accession')配对组成的数据框,如下所示:

Original Data Frame

但是,我想创建一个字典,其中Accession代码是键,其值为13mer与登录相关联,因此它看起来如下:

{'JO2176': ['IGY....', 'QLG...', 'ESS...', ...],
 'CYO21709': ['IGY...', 'TVL...',.............],
 ...}

我使用此代码完成了哪些工作:

Accession_13mers = {}
for group in grouped:
    Accession_13mers[group[0]] = []
    for item in group[1].iteritems():
        Accession_13mers[group[0]].append(item[1])

但是,现在我想回过头来迭代每个Accession代码的键并运行我定义为find_match_position(reference_sequence,13mer)的函数,该函数在参考序列中找到13mer并返回其位置。然后我想把这个位置作为13mer的值来附加,这将是关键。

如果有人对如何加快这个过程非常有帮助有任何想法。

谢谢,

贾斯汀

2 个答案:

答案 0 :(得分:1)

您可以通过解压缩来更干净地遍历群组:

d = {}
for key, s in df.groupby('Accession')['13mer']:
    d[key] = list(s)

这也使你的功能更加清晰!

...但是,我认为它可能更适合枚举:

d2 = {}
for pos, val in enumerate(df['13mer']):
    d2[val] = pos

答案 1 :(得分:1)

我建议创建一个新词典,其值是另一个词典。基本上是一个嵌套字典。

position_nmers = {}
for key in H1_Access_13mers:
    position_nmers[key] = {} # replicate key, val in new dictionary, as a dictionary
    for value in H1_Access_13mers[key]:
        position_nmers[key][value] = # do something

要反省字典并确保它没关系:

print position_nmers