python создать строковую переменную на основе другой строковой переменной (содержит) - PullRequest
0 голосов
/ 10 января 2020

У меня грязная строковая переменная, содержащая информацию о сцене, я хочу создать более чистую строку с меньшим количеством групп. Текущий фрейм данных выглядит следующим образом:

cohort = pd.DataFrame({'stage_group': ['XXX Stage I', 'Stage II XXX', 'Stage III XXX', 'XX Stage IV XXX', 'NA']},index=[1, 2, 3, 4, 5])

Моя идеальная переменная - это 3 уровня: этап I-III, этап IV и неизвестно:

cohort2 = pd.DataFrame({'stage_group': ['XXX Stage I', 'Stage II XXX', 'Stage III XXX', 'XX Stage IV XXX','NA'],'stage': ['Stage I', 'Stage II', 'Stage III', 'Stage IV', 'Unknown']},index=[1, 2, 3, 4, 5])

Я попробовал следующие коды, но они сделали неправильно назначить группу (я только что получил I-III этап и неизвестен). Любые предложения были бы полезны.

searchfor = ['Stage I', 'Stage II', 'Stage III']

cohort['stage'] = pd.np.where(cohort.stage_group.str.contains('|'.join(searchfor)), "Stage I-III",
                  pd.np.where(cohort.stage_group.str.contains('Stage IV'), "Stage IV", "Unkown"))

1 Ответ

1 голос
/ 10 января 2020

Код работает для меня, если я изменяю заказ, потому что Stage IV содержит также Stage I, поэтому Stage IV необходимо проверить перед Stage I

import pandas as pd

data = {'stage_group': '''XXX Stage I 
Stage II XXX
Stage III XXX
XX Stage IV XXX
NA'''.split('\n')
}

cohort = pd.DataFrame(data)

print(cohort)

searchfor = ['Stage I', 'Stage II', 'Stage III']

cohort['stage'] = pd.np.where(cohort.stage_group.str.contains('Stage IV'), "Stage IV",
                  pd.np.where( cohort.stage_group.str.contains('|'.join(searchfor)), "Stage I-III", "Unkown"))

print(cohort)

Результат

       stage_group
0     XXX Stage I 
1     Stage II XXX
2    Stage III XXX
3  XX Stage IV XXX
4               NA

       stage_group        stage
0     XXX Stage I   Stage I-III
1     Stage II XXX  Stage I-III
2    Stage III XXX  Stage I-III
3  XX Stage IV XXX     Stage IV
4               NA       Unkown
...