Я ищу значения, которые частично совпадают в одном столбце, и заменяю столбец «подкатегория» значением, полученным из столбца «имя элемента». Столбец «Подкатегория» в настоящее время дублирует столбец «Название элемента».
Например, на изображении ниже я хотел бы заменить текущие значения в столбце «подкатегория» категорией пива (IPA, Ale, Pale Ale, Lager, Pilsner, et c. ..), полученный из частичного совпадения строки в "имени элемента".
SQL База данных
Я создал новый столбец в обоих моих Pandas dataframe и SQL база данных, которыми я мог бы манипулировать, чтобы получить эту информацию, но у меня нет знаний для этого.
Запрос, который я использовал в SQL, выглядит следующим образом:
ALTER TABLE public.all_beers_specs
ADD "Sub_Category" text;
UPDATE public.all_beers_specs
SET "Sub_Category" = all_beers_specs."Item Name";
SELECT "Sub_Category" from public.all_beers_specs
WHERE "Item Name" like '%IPA%';
ВЫХОД:
Sub_Category
11 Below Hipster Sauce IPA
21st Amendment Brew Free Or Die IPA
21st Amendment Orange Brew Free IPA
4th Tap Double Dry Hopped Double Dragon IPA
4th Tap Kung Fu Robot IPA
Вместо того, чтобы иметь полное название пива в столбце, я хотел бы обрезать его и иметь только IPA. Я хотел бы повторить этот процесс для многих разных сортов пива, чтобы получить аналогичный результат.
РЕДАКТИРОВАТЬ # 1:
Вот решение, которое я придумал в python:
КОД:
dataframe = pd.read_csv(path_to_my_dataframe.csv')
#print(dataframe)
list_of_beers = dataframe['Item Name'].to_list()
lower_case_list = [x.upper() for x in list_of_beers]
#creating a list to append results
subcategory_list =[]
for b in lower_case_list:
#print(b)
if 'IPA' in b:
ipa = 'IPA'
subcategory_list.append(ipa)
else:
if 'ALE' in b:
ale = 'ALE'
subcategory_list.append(ale)
else:
if 'STOUT' in b:
stout = 'STOUT'
subcategory_list.append(stout)
ВЫХОД:
Token Item Name ... Price Sub_Category
0 NaN 11 Below 7 Iron Blonde ... $8.82 N/A
1 NaN 11 Below Big Mistake Ba Stout ... $8.41 STOUT
2 NaN 11 Below Hipster Sauce IPA ... $9.78 IPA
3 NaN 11 Below Java Space Coffee Stout ... $12.48 STOUT
4 NaN 11 Below Lame Duck Pale Ale ... $8.76 ALE
... ... ... ... ... ...
2899 NaN Zilker Brewing Coffee Milk Stout ... $8.94 STOUT
2900 NaN Zilker Brewing Friends With Benefits IPA ... $12.78 IPA
2901 NaN Zilker Brewing Marco IPA ... $8.94 IPA
2902 NaN Zilker Brewing Parks and Rec Pale Ale ... $8.94 ALE
2903 NaN Zilker Heavenly Daze IPA ... $10.92 IPA
Я уверен, что есть более эффективный способ классификации пива вместо бесконечных операторов if else, возможно, с использованием класса или определение функции?
Кроме того, для записей 4 и 2902 я хотел бы, чтобы они были классифицированы как PALE ALE, а не просто ALE. Я попытался добавить
if 'ALE' != 'PALE ALE' in B:
ALE = ALE
Есть ли способ точно сопоставить / отфильтровать эти символы этих строк?