как объединить str с накопительным no и создать еще один столбец в фрейме данных в python?

#python #pandas #dataframe

#python #pandas #фрейм данных

Вопрос:

У меня есть фрейм данных

 yr = pd.DataFrame({"age":["(young 17 yrs)","(young 19 yrs)","(old)","(young 25 yrs)",  
"(old)","(young 27 yrs)"]})
 

Я хочу добавить еще один столбец с именем «i_tag», который будет извлекать строку из столбца «возраст», если он молодой или старый, и кумулятивно присваивать id_number соответственно

Требуемый вывод

 yr = pd.DataFrame({"age":["(young 17 yrs)","(young 19 yrs)","(old)","(young 25 yrs)",  
"(old)","(old)"], "i_tag":["id1","id1","id2","id3", "id4","id4"]})
 

Ответ №1:

Вы могли бы сделать:

 ages = (yr['age'].str.extract(r'b(old|young)b'))
tag = 'id{}'.format
yr['i_tag'] = (ages != ages.shift(1)).cumsum().squeeze().apply(tag)
print(yr)
 

Вывод

               age i_tag
0  (young 17 yrs)   id1
1  (young 19 yrs)   id1
2           (old)   id2
3  (young 25 yrs)   id3
4           (old)   id4
5  (young 27 yrs)   id5
 

Ответ №2:

Давайте сделаем findall это с shift помощью и cumsum

 s = yr.age.str.findall('young|old').str[0]
yr['tag']=s.ne(s.shift()).cumsum()
yr
Out[342]: 
              age  tag
0  (young 17 yrs)    1
1  (young 19 yrs)    1
2           (old)    2
3  (young 25 yrs)    3
4           (old)    4
5  (young 27 yrs)    5