Объединение таблиц и выборка данных в результирующую таблицу Python

Дано: 4 книги Excel с таблицами о данных клиентов :

  1. таблица клиентов
  2. таблица договоров (№ договора наличие атрибута 1 и атрибута 2)
  3. таблица исключений
  4. таблица представителей клиентов

Требуется построить сводную xlsx таблицу по всем договорам с условиями: исключить клиентов из файла таблица исключений и договоры не имеют одновременно атрибута 1 и 2. Вывести данные столбцов (из 4 таблиц) в сводную, чтобы столбцы не дублировались.

Я загрузил 4 таблицы через pandas, во всех исходных таблицах добавил единый столбец (номер договора), чтобы он был ключом, по которому через merge связать их. Решение вижу такое - склеить 4 таблицы в единый датафрейм, задать фильтрующее условие, выгрузить датафрейм в excel. Не понимаю как правильно склеить таблицы и как задать правильное условие для выбора требуемых атрибутов в финальной таблице. На экран команда почему-то выводит больше строчек результирующей таблицы, чем требуется, в частности есть строки с клиентами-исключениями, которых быть не должно

   import pandas as pd
import openpyxl

da = pd.read_excel('Договоры.xlsx')
db = pd.read_excel('Исключения.xlsx')
dc = pd.read_excel('Клиенты.xlsx')
de = pd.read_excel('ОС и ЗС.xlsx')
new_df = da.merge(db, how = 'outer', on='№ договора').merge(dc, how = 'outer', on='№ договора').merge(de, how = 'outer', on='№ договора')
Client=new_df[(new_df['Атрибут B'] =='нет')|(new_df['Атрибут A'] =='нет')|(new_df['ИНН_исключения'] =='NaN')]
Client.to_excel('Задание2.xlsx')

Ответы (1 шт):

Автор решения: Python_junior
import pandas as pd

da = pd.read_excel('Договоры.xlsx')
db = pd.read_excel('Исключения.xlsx')
dc = pd.read_excel('Клиенты.xlsx')
de = pd.read_excel('ОС и ЗС.xlsx')
new_df = da.merge(db, how = 'outer', on='№ договора').merge(dc, how = 'outer', on='№ договора').merge(de, how = 'outer', on='№ договора')
Client=new_df[(new_df['Атрибут B'] =='нет')&(new_df['Атрибут A'] =='нет')&(new_df['ИНН_исключения'].isnull())]
Client_new=Client[['Наименование клиента','ИНН','№ договора','Ид_договора','Атрибут A','Атрибут B','ФИО_ОС','ФИО_ЗС','Подразделение обслуживания']]
Client_new.to_excel('Задание2.xlsx',index=False)
→ Ссылка