Сравните два гигантских кадра данных - PullRequest
1 голос
/ 15 октября 2019

У меня есть два гигантских фрейма данных, один имеет 38 тыс. Строк, а другой 42 тыс. Я пытаюсь собрать код, который сравнивает эти два df и изолирует уникальные строки, которые не выходят в другом. Я пробовал вложенные циклы, но объем данных слишком велик, и на его завершение уходит вечность. Я ищу более простой и эффективный способ сделать эту работу. Вот ситуация: Df1 имеет следующие важные столбцы: Business_unit, operating_unit, Process_num, Res_type. Df2 имеет похожие столбцы, но названы по-разному. Например, Business_unit теперь является Unit. Operating_unit теперь является Oper Unit. Кроме того, тип данных для этих столбцов в разных таблицах различен. Например, Business Unit - это 01 (str) в одной таблице, но 1 (int) в другой. Поэтому, если бы я использовал concat, а затем удалил дубликаты, мне пришлось бы сделать две таблицы в одном формате. Как мне это сделать? В настоящее время я использую следующий вложенный цикл, но он может обрабатывать только около 1000 строк. Все, что находится за этим, будет длиться вечно.

match_count=0
for index, row_a in SQL_download.head(n=1000).iterrows():
    for index, row_b in web_pull.head(n=1000).iterrows():
        if int(row_a['Process_Number'])==row_b['Process'] and int(row_a['Resource_Type'])==row_b['Res Type'] and row_a['Amount']==row_b['Sum Amount'] \
        and int(row_a['BUSINESS_UNIT'])==row_b['Unit'] and int(row_a['OPERATING_UNIT'])==row_b['Oper Unit'] and int(row_a['ACCOUNT'])==row_b['Account']:
            findmatch=True
            match_count=match_count+1
            break

1 Ответ

0 голосов
/ 15 октября 2019

Вы можете объединить слияние и фильтрацию:

import pandas as pd

df1 = pd.DataFrame({'col1': [0, 1], 'col_left': ['a', 'b']})
df2 = pd.DataFrame({'col1': [1, 2, 2], 'col_right': [2, 2, 2]})

df3 = df1.merge(df2, on="col1", how="outer", indicator=True)

df3[df3._merge != "both"]

производит:

   col1 col_left  col_right      _merge
0     0        a        NaN   left_only
2     2      NaN        2.0  right_only
3     2      NaN        2.0  right_only
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...