У меня есть массив:
array(['Amazon', 'Amazon mix', 'Amazon, ICS', 'Beniano', 'Blend',
'Blend-Forastero,Criollo', 'CCN51', 'Criollo', 'Criollo (Amarru)',
'Criollo (Ocumare 61)', 'Criollo (Ocumare 67)',
'Criollo (Ocumare 77)', 'Criollo (Ocumare)', 'Criollo (Porcelana)',
'Criollo (Wild)', 'Criollo, +', 'Criollo, Forastero',
'Criollo, Trinitario', 'EET', 'Forastero', 'Forastero (Amelonado)',
'Forastero (Arriba)', 'Forastero (Arriba) ASS',
'Forastero (Arriba) ASSS', 'Forastero (Catongo)',
'Forastero (Nacional)', 'Forastero (Parazinho)',
'Forastero(Arriba, CCN)', 'Forastero, Trinitario', 'Matina',
'NA_bean', 'Nacional', 'Nacional (Arriba)', 'Other', 'Trinitario',
'Trinitario (85% Criollo)', 'Trinitario (Amelonado)',
'Trinitario (Scavina)', 'Trinitario, Criollo',
'Trinitario, Forastero', 'Trinitario, Nacional',
'Trinitario, TCGA'], dtype=object)
И я хочу стандартизировать их, чтобы удалить количество уникальных значений. Итак, я создал функцию:
def std_bean(text):
replace = [
['\(',''],['\)',''],
['Amazon mix|Amazon, ICS|Blend-Forastero,Criollo|Criollo, Trinitario|Forastero, Trinitario|Trinitario 85% Criollo|Trinitario, Criollo|Trinitario, Forastero|Trinitario, Nacional','Blend'],
['Forastero Arriba|Forestero ASS|Forestero ASSS|Forastero Nacional|Forastero Catongo|Forastero Parazinho|Forastero Arriba ASS|ForasteroArriba, CCN|Forastero Arriba ASSS|Forastero Amelonado','Forastero'],
['Criollo Ocumare 77', 'Criollo'],
['Criollo Ocumare 61', 'Criollo'],
['Criollo Ocumare', 'Criollo'],
['Criollo Wild', 'Criollo'],
['Criollo, +', 'Criollo'],
['Criollo+', 'Criollo'],
['Criollo 67', 'Criollo'],
['Criollo, Forastero', 'Criollo'],
['Criollo Amarru', 'Criollo'],
['Forestero ASSS', 'Forastero'],
['Forastero ASS', 'Forastero'],
['Forestero', 'Forastero'],
['Trinitario Amelonado', 'Trinitario'],
['Forestero ASSS', 'Forastero'],
['Nacional Arriba', 'Nacional'],
['Trinitario, TCGA', 'Trinitario'],
['Criollo Porcelana','Criollo'],
['ForasteroS', 'Forastero']
]
for i, j in replace:
text = re.sub(i, j, text)
return(text)
df['bean_type'].str.replace('.','').apply(std_bean).unique()
После применения у меня все еще есть такие значения, как «Criollo +», «CriolloForastero» и другие, которые я просто не могу заменить, я не знаю, как это исправить ...
array(['NA_bean', 'Criollo', 'Trinitario', 'Forastero', 'Blend', 'CCN51',
'Nacional', 'Beniano', 'Criollo+', 'Amazon', 'EET',
'Trinitario Scavina', 'CriolloForastero', 'Matina', 'Other'],
dtype=object)
Может ли кто-нибудь помочь мне улучшить функцию? Я просто хочу объединить те, которые похожи друг на друга. Пометить как смешать тех, у кого есть более одного типа бобов (либо с запятой, либо с надписью mix, либо имя другого типа бобов внутри скобок) и оставить имя, которое не в скобках, для тех, кто не смеси.
Окончательный результат, который я хочу получить, - это только «Blend, Criollo, Forastero, NA_bean, Matina, Nacional и другие»
Я хочу сгруппировать их как смесь:
'Amazon mix | Amazon, ICS | Blend-Forastero, Criollo | Criollo, Trinitario | Forastero, Trinitario | Trinitario 85% Criollo | Тринитарио, Criollo | Тринитарио, Форастеро | Тринитарио, Насиональ'
Я хочу это как Форастеро:
[Forastero Arriba | Forestero ASSS | Forestero ASSS | Forastero Nacional | Forastero Catongo | Forastero Parazinho | Forastero Arriba ASS | ForasteroArriba, CCN | Forastero Arriba ASSS | Forastero Amelonado ',' Forastero '] * 1016
и т. Д.