Pandas DataFrame 转换为多个键的字典

1 投票
2 回答
1325 浏览
提问于 2025-04-18 09:19

我现在正在处理一个数据表,这个表里有一列是13个字母组成的字符串(我们叫它'13mer'),还有一列是对应的ID代码(我们叫它'Accession'),大概是这样的:

原始数据表

不过,我想创建一个字典,把Accession代码当作键,把与这些代码相关的13mers当作值,这样看起来会像这样:

{'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 个回答

1

你可以通过解包的方式,更干净地遍历groupby:

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

这样做也能更清楚地告诉你应该把函数放在哪里!

... 不过,我觉得用enumerate可能会更合适:

d2 = {}
for pos, val in enumerate(df['13mer']):
    d2[val] = pos
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

撰写回答