#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 Здесь появился еще один индекс потому что я копировал ваши исходные датафреймы из буфера обмена.
Комментариев нет:
Отправить комментарий