Я должен обработать файл Excel, используя pandas. Файл Excel имеет три столбца, как показано здесь (пример) excelfile . Столбец LicNo не является уникальным.
Я должен сгруппировать его по 'LicNo', чтобы собрать всех 'Лицензиатов' в одной строке. В сгруппированной таблице будет «LicNo» и только группа столбцов «Лицензиат» (все подряд), игнорирующая средний столбец в исходном файле Excel.
Теперь, чтобы идентифицировать дубликаты, я должен искать, повторяется ли «Лицензиат» в первом столбце в последующих столбцах (т.е. оси-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. Вы могли бы помочь мне? Спасибо. Изменить: Желаемый результат: - Файл результатов