Использование пакета re
для удаления ненужной избыточной строки и функции apply
для строк в пандах DataFrame
должно выполнить эту работу.
В приведенном ниже коде вы видите возможное решение:
import pandas as pd
import re
def removeReduntantData(row):
if row["strength"] is not None:
string = row["strength"].replace(" ", "\s?")
return re.sub(re.compile(string+"\s?", re.IGNORECASE), "", row["name"]).strip()
else:
return row["name"]
df = pd.DataFrame({"name":["Vitamin B12 Tab 500mcg","Vitamin B12 Tab 5mcg","Vitamin B12 Tablets 250mcg","Vitamin B12-folic Acid","Vitamin B6 & B12 With Folic Acid","Vitamin Deficiency Injectable System - B12","Vitamine 110 Liq","Vitamine B-12 Tab 100mcg","Vitamine B12 25 Mcg - Tablet","Vitamine B12 250mcg"],\
"strength":["500 mcg","5 mcg","250 mcg",None,None,None,None,"100 mcg","25 mcg","250 mcg"]})
df["name"] = df.apply(removeReduntantData, axis=1)
Выходные данные DataFrame
равны:
>>> df
name strength
0 Vitamin B12 Tab 500 mcg
1 Vitamin B12 Tab 5 mcg
2 Vitamin B12 Tablets 250 mcg
3 Vitamin B12-folic Acid None
4 Vitamin B6 & B12 With Folic Acid None
5 Vitamin Deficiency Injectable System - B12 None
6 Vitamine 110 Liq None
7 Vitamine B-12 Tab 100 mcg
8 Vitamine B12 - Tablet 25 mcg
9 Vitamine B12 250 mcg
Таким образом, вы в конечном итоге используете столбец strength
для поиска избыточной строки в столбце name
и удаления их,принимая во внимание, что лишняя строка может не иметь пробела между ними.