Проблема с использованием условной строки с np.select - PullRequest
1 голос
/ 25 апреля 2019

Я пытаюсь создать новый столбец в кадре данных pandas на основе того, содержится ли строка в другом столбце. Я использую np.select на основе этого сообщения . Вот пример кадра данных и пример функции для создания нового столбца

df=pd.DataFrame({'column':['one','ones','other','two','twos','others','three','threes']})

def add(df):

    conditions = [
        ('one' in df['column']),
        ('two' in df['column']),
        ('three' in df['column']),
        ('other' in df['column'])] 

    choices = [1, 2, 3, 0]
    df['Int'] = np.select(conditions, choices, default=0)

    return df

new_df=add(df)

Вывод, который я получаю

   column  Int
0     one    0
1    ones    0
2   other    0
3     two    0
4    twos    0
5  others    0
6   three    0
7  threes    0

И что я хочу, это

   column  Int
0     one    1
1    ones    1
2   other    0
3     two    2
4    twos    2
5  others    0
6   three    3
7  threes    3

что я делаю не так?

1 Ответ

1 голос
/ 25 апреля 2019

Если нужны тестовые подстроки, используйте Series.str.contains:

 conditions = [
        (df['column'].str.contains('one')),
        (df['column'].str.contains('two')),
        (df['column'].str.contains('three')),
        (df['column'].str.contains('other'))] 

Если необходимо точное совпадение, используйте Series.eq или ==:

 conditions = [
        (df['column'].eq('one')),
        (df['column'].eq('two')),
        (df['column'].eq('three')),
        (df['column'].eq('other'))] 

 conditions = [
        (df['column'] == 'one'),
        (df['column'] == 'two'),
        (df['column'] == 'three'),
        (df['column'] == 'other')] 

print (new_df)
   column  Int
0     one    1
1    ones    1
2   other    0
3     two    2
4    twos    2
5  others    0
6   three    3
7  threes    3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...