gpt4 book ai didi

python - 加快 Pandas 数据框中的搜索速度

转载 作者:太空宇宙 更新时间:2023-11-04 07:56:56 25 4
gpt4 key购买 nike

我有一个名为 real_info 的数据框,例如它有 3 列:

  Source   Target Interaction
0 MAP7D1 APOA1 physical
1 MAP7D1 RBM48 physical
2 MAP7D1 GPRASP1 physical
3 MAP7D1 COPS6 physical
4 USP20 MAP7D1 physical

我将这些列像这样索引到一个新的数据框中,认为搜索会很快:

new_df = real_info.set_index(['Source','Target','Interaction'])

我有 5000 个 name_list 字符串,我在 new_df 中搜索这对字符串。如果有匹配项,那么我将存储在一个文件中,例如:

for names_A in name_list:
for names_B in name_list:
res = df.query('Source == "{}" & Target == "{}"'.format(names_A,names_B))
if len(res.index.tolist()) > 0:
res.to_csv('nets.csv', mode='a', header=False)

此过程有效,但搜索 5000 X 5000 列表对的速度非常慢。有什么改进的建议吗?

最佳答案

您实际上已经完成了一半。非常感谢 MaxU,从他的帖子中借用了数据。


第一步
索引是一个不错的选择,但我们只索引前两列:

df = df.set_index(['Source', 'Target'])
df

Interaction
Source Target
a z physical
b c physical
c x physical
d y physical
e b physical
b a physical

第 2 步
生成所有可能的组合:

import itertools

c = list(itertools.product(name_list, name_list))
c


[('a', 'a'),
('a', 'b'),
('a', 'c'),
('b', 'a'),
('b', 'b'),
('b', 'c'),
('c', 'a'),
('c', 'b'),
('c', 'c')]

第 3 步
索引到您的数据框中,并保存:

df = df.loc[df.index.intersection(c)].reset_index()
df

Source Target Interaction
0 b a physical
1 b c physical

df.to_csv('nets.csv')

如果您有两个或多个 name_list 需要从中查找组合,而不是从单个 name_list 中获取元素,则可以选择此选项,其中情况下,您会选择 MaxU 的答案。

关于python - 加快 Pandas 数据框中的搜索速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47122613/

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