Поиск дубликатов по нескольким группам в столбце - Python - PullRequest
0 голосов
/ 13 февраля 2020

Мне нужна действительно серьезная помощь с некоторым кодом.

У меня есть кадр данных, в котором я хочу найти дубликаты в 2 столбцах - номер по каталогу материала и производитель. Столбцы имеют нулевые значения. Мне нужно найти дубликаты следующим образом.

  1. Сначала я проверяю столбец Номер детали на наличие строк без нулевых значений. Так как я не хочу, чтобы нулевые значения рассматривались как дубликаты
  2. Если совпадают номера деталей, для двух одинаковых номеров деталей я проверяю столбец производителя на наличие дубликатов.
  3. Включаем как производителя, так и номера деталей одинаковы для двух или более строк, я вывожу результат в новый столбец под названием уровень дублирования. Вывод высокий для всех строк, в которых номера деталей и производители имеют точное совпадение.
  4. Однако, если номера деталей совпадают, а производитель не совпадает, вывод в столбец будет «Умеренный» ».
  5. Если сам номер детали не совпадает, то уровень дублирования равен 'No Duplicate'
  6. Кроме того, для строк, которые имеют номер NA в номере детали или производителя, укажите уровень дублирования как «без дубликатов», номер детали и умеренный номер производителя.

Это моя таблица ввода введите описание изображения здесь

код, который я написал для того же -

`for i in range(len(df)):
    if pd.isnull(df.loc[i,'Material Part Number'])==False:
        if (df['Material Part Number'].duplicated(keep=False))[i]==True:
            if pd.isnull(df.loc[i,'Manufacturer'])==False:
                if (df['Manufacturer'].duplicated(keep=False))[i]==True:
                        df.loc[i,'Level of Duplicacy']='High'
                else:
                        df.loc[i,'Level of Duplicacy']='Moderate'
            else:
                 df.loc[i,'Level of Duplicacy']='Moderate'
        else:
            df.loc[i,'Level of Duplicacy']='Not duplicate'
    else:
         df.loc[i,'Level of Duplicacy']='Not duplicate'`

Мне нужен вывод введите описание изображения здесь

Вывод, который я получаю введите описание изображения здесь

Как вы можете видеть в строках, выделенных желтым цветом, мой код не сравнивает производителей по одному конкретному / уникальному номеру детали, а выполняет его по всем номерам деталей, и я этого не хочу который. Я знаю, что функция .duplicated () сравнивает весь столбец, но что, если я хочу, чтобы она сравнивалась с каждым уникальным номером детали, а затем находила совпадение? Больше группового с дублированием? Может ли один из вас помочь мне изменить написанный мной код?

Большое спасибо.

1 Ответ

0 голосов
/ 13 февраля 2020

Выполнение al oop через фрейм данных потребует от вас поэлементного сравнения каждого элемента. Я бы предложил использовать матричную алгебру для достижения этой цели. Посмотрите ниже, это может быть полезно.

df["Level of Duplicacy"] = "Not Duplicate"
Partdups = df.loc[df["Material Part Number"].duplicated(),"Material Part Number"].unique()
for dup in Partdups:
    Nums = df.loc[df["Material Part Number"] == dup,:]
    dupNums = Nums.loc[Nums["Manufacturer"].duplicated(),"Manufacturer"].unique()
    for num in dupNums:
        Nums.loc[Nums["Manufacturer"] == num,"Level of Duplicacy"] = "High"
        Nums.loc[Nums["Manufacturer"] != num,"Level of Duplicacy"] = "Moderate"
        df.iloc[Nums["Material Part Number"].index,:] = Nums

df.loc[pd.isnull(df["Material Part Number"]),"Level of Duplicacy"] = "Not Duplicate"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...