Страницы

Поиск по вопросам

вторник, 31 декабря 2019 г.

Как вычесть из одного датафрейма второй в pandas?

#python #pandas #анализ


Есть два датафрейма. Некоторые значения в них полностью одинаковые, но большинство
- разные.
Нужно как то из одного датафрейма вычесть все значения второго датафрейма, чтобы
первый стал уникальным. Подскажите, как лучше сделать? 

df1

№   Фамилия Имя Отчество    № договора  Login   Остаток Доб.    Изм.
0   Иванов Иван Иванович    1           Ivan    100     13.01 16:31:11
1   Петров Петр Петрович    2           Petr    100     14.03 11:25:46


df2

 №  Фамилия Имя Отчество    № договора  Login   Остаток Доб.    Изм.
 0  Иванов Иван Иванович    1           Ivan    100     13.01 16:31:11


Новый датафрейм должен быть таким:

№   Фамилия Имя Отчество    № договора  Login   Остаток Доб.    Изм.
1   Петров Петр Петрович    2           Petr    100     14.03 11:25:46


То есть из df1 нужно вычесть df2
    


Ответы

Ответ 1



Можно объединить оба датафрейма с помощью concat(), а потом удалить из него дубликаты, используя drop_duplicates() с параметром keep=False, который отвечает за удаление всех дубликатов. In [4]: df1 Out[4]: № Фамилия Имя Отчество №.1 договора Login Остаток Доб. Изм. 0 0 Иванов Иван Иванович 1 Ivan 100 13.01 16:31:11 NaN 1 1 Петров Петр Петрович 2 Petr 100 14.03 11:25:46 NaN In [5]: df2 Out[5]: № Фамилия Имя Отчество №.1 договора Login Остаток Доб. Изм. 0 0 Иванов Иван Иванович 1 Ivan 100 13.01 16:31:11 NaN In [6]: pd.concat([df1, df2]) Out[6]: № Фамилия Имя Отчество №.1 договора Login Остаток Доб. Изм. 0 0 Иванов Иван Иванович 1 Ivan 100 13.01 16:31:11 NaN 1 1 Петров Петр Петрович 2 Petr 100 14.03 11:25:46 NaN 0 0 Иванов Иван Иванович 1 Ivan 100 13.01 16:31:11 NaN In [7]: pd.concat([df1, df2]).drop_duplicates(keep=False) Out[7]: № Фамилия Имя Отчество №.1 договора Login Остаток Доб. Изм. 1 1 Петров Петр Петрович 2 Petr 100 14.03 11:25:46 NaN

Ответ 2



Если у вас структура датафреймов идентичная, тогда есть простое решение: res = df1[~df1.index.isin(df2.index)] Получим № Фамилия Имя Отчество №.1 договора Login Остаток Доб. Изм. 1 1 Петров Петр Петрович 2 Petr 100 14.03 11:25:46 NaN Здесь появился еще один индекс потому что я копировал ваши исходные датафреймы из буфера обмена.

Комментариев нет:

Отправить комментарий