Ищите, идентифицируйте дубликаты данных в файле Excel и переформатируйте их, используя Pandas - PullRequest
0 голосов
/ 28 февраля 2020

Я должен обработать файл Excel, используя pandas. Файл Excel имеет три столбца, как показано здесь (пример) excelfile . Столбец LicNo не является уникальным.

  • Моя задача-1:

Я должен сгруппировать его по 'LicNo', чтобы собрать всех 'Лицензиатов' в одной строке. В сгруппированной таблице будет «LicNo» и только группа столбцов «Лицензиат» (все подряд), игнорирующая средний столбец в исходном файле Excel.

  • My Task-2:

Теперь, чтобы идентифицировать дубликаты, я должен искать, повторяется ли «Лицензиат» в первом столбце в последующих столбцах (т.е. оси-1). Поиск будет основан на первом слове в тексте в первом столбце; если это повторяется в следующих столбцах, чтобы объявить его как «Возможные дубликаты». Вот код, который я написал:

enter code here
import pandas as pd
import numpy as np
from itertools import chain
df=pd.read_excel("compare_usr.xlsx",dtype={'LicNo': int,'ScheduleNo':str, 'Licensee': str})
#df.isna().any()
df=df.dropna(axis='index')
df['Licensee'] = df.Licensee.str.replace(r'\n', '')
#to make the strings uniform as in certain  fields the M/s is present.
df["Licensee"]=df.Licensee.str.replace("M/s ","") 
# the character ';' is inserted to segregate the duplicate LicNo while transposing into rows
df.loc[:,"Licensee"]=df["Licensee"].astype(str)+";"
def func(x):
    ch = chain.from_iterable(y.split(';') for y in x.tolist())
    return '\n'.join(((ch)))      
dfNew=df.groupby('LicNo') ['Licensee'].apply(func).str.split("\n+",expand=True)#.to_excel("test2.xls")

следующие две строки, помеченные как (1) и (2), не производят желаемый вывод а не в коде. Приведенный ниже код функции (fun (строка)), однако, дает ожидаемый результат.

 #dfNew['Status']=np.where((dfNew[x+1].str.contains(dfNew[0].str,na=False) for x in col),"match","unmatch") # (1)
#dfNew['Status']=np.where((dfNew[x+1].str.apply(lambda y: dfNew[0].str in y) for x in range(6)),"match","unmatch") #(2)

# in the original Excel file there are about 4000 rows and it   produced 18 columns of duplicates.   
enter code here


def fun(row):
    col=[i+1 for i in range(17)] 
    for i in col:
       if row[i] is None:
          continue
    #to extract the first word from row[0]

    if (row[0].split()[0].lower() in row[i].lower()):
        return True
return False
dfNew['Status']=np.where(dfNew.apply(fun,axis=1)==True,dfNew.index,"May be duplicate or only in   one file")

Теперь мой вопрос: я хотел бы заменить функцию 'fun (row)' (это работает и производит желаемый результат). результат) с любой из двух строк, помеченных как (1) и (2) в коде для создания dfNew ['Status']. Я не могу оценить, что идет не так в любой из этих двух строк, так как обе дают неправильный результат. Я пишу код для начинающих в Python и обязан stackflow.com за то, что скопировал коды из некоторых ответов в других топиках c. Вы могли бы помочь мне? Спасибо. Изменить: Желаемый результат: - Файл результатов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...