Pandas DataFrame 转换为多个键的字典
我现在正在处理一个数据表,这个表里有一列是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