Как обновить значение столбца на основе нескольких условий в Python? - PullRequest
2 голосов
/ 30 сентября 2019

У меня есть следующий Dataframe, содержащий различные названия продуктов, и выглядит так:

                                       Name  
0                            1 Enkelt (35%) 
1                          1 Klasses Bitter  
2               1 minute Urban Protect Mask  
3                       10 Years Tawny Port 
4                             100% Frugtbar  
5                       100% Klementinjuice  
6                            100% Kokosvand
7                    1000 kernerugbrød øko. 

См. Этот продукт: 1000 kernerugbrød øko.. Я пытаюсь поставить некоторые условия, чтобы убрать oko. с конца, и, основываясь на правилах датского языка, касающихся единственного и множественного числа, добавить либо «Økologisk» (единственное число), либо «Økologisk e »(множественное число) перед именем. В этом случае, поскольку kernerugbrød не заканчивается буквой r , это должен быть Økologisk.

Таким образом, в основном идея такова:

У меня есть строка, содержащая это значение в столбце Name: 1000 kernerugbrød øko. -> Я удаляю oko., в результате чего 1000 kernerugbrød -> Я проверяю, является ли последняя буква r или нет -> Добавить Økologisk или Økologiske в зависимости от предыдущего шага -> итоговая строка должна быть: Økologisk 1000 kernerugbrød.

Моя попытка была следующей:

text = "Økologisk "
text2 = "Økologiske "

df['test'] = df['Name'].str.contains(",?\søko.") #creating a new column containing 
                                 #booleans to check which Name contains "oko."

df['Name'] = df['Name'].str.replace(r',?\søko.', "") #replacing "oko." with empty string

if df['test']: #if the Name contained "oko."
    if df['Name'].str.contains("r(\s)?$"): #checking for plural
        df['Name'] = text2 + df['Name']
    else:
        df['Name'] = text + df['Name']

Однако я получаю этоошибка в if df['test'].

ValueError: Значение истинности Серии неоднозначно. Используйте a.empty, a.bool (), a.item (), a.any () или a.all ().

Я пытался использовать приведенные выше предложения, но ни одно из них на самом деле не помогаетя с этой задачей. Поэтому, что я должен сделать, чтобы исправить мой код ИЛИ как еще мой код должен быть написан, чтобы найти правильное решение для этой проблемы?

1 Ответ

2 голосов
/ 30 сентября 2019

Я думаю, вы можете использовать двойной numpy.where:

m1 = df['Name'].str.contains(",?\søko.") #creating a new column containing 
                                 #booleans to check which Name contains "oko."

df['Name'] = df['Name'].str.replace(r',?\søko.', "") #replacing "oko." with empty string

m2 = df['Name'].str.contains("r(\s)?$")

df['Name'] = np.where(~m1, df['Name'],
             np.where(m2, text2, text) + df['Name'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...