Заменить значения из одного столбца в фрейме данных

импортировать панд как pd импортировать numpy как np импортировать

pd.options.display.max_columns = 20

У меня есть сезон столбца данных, который выглядит так (первые 20 записей):

      season
0     2006-07
1     2007-08
2     2008-09
3     2009-10
4     2010-11
5     2011-12
6     2012-13
7     2013-14
8     2014-15
9     2015-16
10    2016-17
11    2017-18
12    2018-19
13     Career
14     season
15    2018-19
16     Career
17     season
18    2017-18
19    2018-19

Он начинается с сезона и заканчивается карьерой. Я хочу заменить годы числами, начинающимися с 1 и заканчивающимися карьерой. Я хочу быть таким:

      season
0     1
1     2
2     3
3     4
4     5
5     6
6     7
7     8
8     9
9     10
10    11
11    12
12    13
13     Career
14     season
15    1
16     Career
17     season
18    1
19    2

Таким образом, подсчет должен сбрасываться каждый раз, когда в столбце есть сезон, и заканчиваться каждый раз, когда есть карьера.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
28
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Создайте последовательные группы по маске сравнения, созданной Series.isin со сдвинутыми значениями с GroupBy.cumcount для счетчика:

s = df['season'].isin(['Career', 'season'])
df['new'] = np.where(s, df['season'], df.groupby(s.ne(s.shift()).cumsum()).cumcount() + 1)
print (df)
     season     new
0   2006-07       1
1   2007-08       2
2   2008-09       3
3   2009-10       4
4   2010-11       5
5   2011-12       6
6   2012-13       7
7   2013-14       8
8   2014-15       9
9   2015-16      10
10  2016-17      11
11  2017-18      12
12  2018-19      13
13   Career  Career
14   season  season
15  2018-19       1
16   Career  Career
17   season  season
18  2017-18       1
19  2018-19       2

Для замены столбца season:

s = df['season'].isin(['Career', 'season'])
df.loc[~s, 'season'] = df.groupby(s.ne(s.shift()).cumsum()).cumcount() + 1
print (df)
    season
0        1
1        2
2        3
3        4
4        5
5        6
6        7
7        8
8        9
9       10
10      11
11      12
12      13
13  Career
14  season
15       1
16  Career
17  season
18       1
19       2

Другие вопросы по теме