Перебрать два фрейма данных и создать словарь в одном фрейме данных, который является подстрокой в ​​строках, найденных во втором фрейме данных (значения) - PullRequest
0 голосов
/ 16 июня 2020

У меня есть два фрейма данных. Один очень большой и содержит более 4 миллионов строк данных, а другой - около 26 КБ. Я пытаюсь создать словарь, где ключи - это строки меньшего фрейма данных. Этот фрейм данных (df1) содержит подстроки или неполные имена, а больший фрейм данных (df2) содержит полные имена / строки, и я хочу проверить, находится ли подстрока из df1 в строках в df2, а затем создать свой dict.

Независимо от того, что я пытаюсь, мой код занимает много времени, и я продолжаю искать более быстрые способы итерации через 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
* 1005 более 1 миллиона строк?

Пример данных:

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']
...}

эт c

1 Ответ

0 голосов
/ 16 июня 2020

Проблема здесь в том, что вложенные циклы for очень плохо работают по мере увеличения объема данных. К счастью, pandas позволяет нам выполнять векторизованные операции по строкам / столбцам.

Я не могу правильно протестировать, не имея доступа к образцу ваших данных, но я считаю, что это помогает и работает намного быстрее:

org_dict = {substr: df2.full_name[df2.full_name.str.contains(substr)].tolist() for substr in df1.part_name}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...