遍历两个数据框并创建字典,一个数据框是第二个数据框(值)中找到的字符串中的子字符串

时间:2020-06-16 17:26:31

标签: python pandas dataframe

我有两个数据框。一个非常大,有超过400万行数据,而另一个则有大约26k。我正在尝试创建一个字典,其中的键是较小数据框的字符串。此数据帧(df1)包含子字符串或不完整的名称,较大的数据帧(df2)包含全名/字符串,我想检查df1中的子字符串是否在df2中的字符串中,然后创建我的字典。

无论我尝试什么,我的代码都花很长时间,而且我一直在寻找迭代df的更快方法。

org_dict={}
for rowi in df1.itertuples():
    part = rowi.part_name
    full_list = []
    for rowj in df2.itertuples():
        if part in rowj.full_name:
            full_list.append(full_name)
            org_dict[part]=full_list

我错过了休息时间还是有更快的方法来遍历超过100万行的超大型数据帧?

样本数据:

df1

    part_name
0   aaa
1   bb
2   856
3   cool
4   man
5   a0

df2

    full_name
0   aaa35688d
1   coolbbd
2   8564578
3   coolaaa
4   man4857684
5   a03567

预期输出:

{'aaa':['aaa35688d','coolaaa'],
'bb':['coolbbd'],
'856':['8564578']
...}

1 个答案:

答案 0 :(得分:0)

这里的问题是,随着数据的增大,嵌套的for循环在时间上的执行效果非常差。幸运的是,熊猫使我们能够跨行/列执行矢量化操作。

如果无法访问您的数据样本,我将无法正确测试,但是我相信这可以达到目的,并且执行速度更快:

org_dict = {substr: df2.full_name[df2.full_name.str.contains(substr)].tolist() for substr in df1.part_name}