Вопрос:
Учитывая кадр данных с такими данными:
>>> df
data
0 START
1 blah
2 blah
3 blah
4 blah
5 END
6 START
7 blah
8 blah
9 END
Каков наиболее эффективный способ назначить новый столбец с порядковым номером, который увеличивается на каждые START
? Это мой желаемый результат:
>>> df
data number
0 START 1
1 blah 1
2 blah 1
3 blah 1
4 blah 1
5 END 1
6 START 2
7 blah 2
8 blah 2
9 END 2
Что я сделал
Это отлично работает, но довольно медленно (это будет применяться к гораздо большему фрейму данных, и я уверен, что есть лучший способ сделать это:
counter = 0
df = df.assign(number = 0)
for i, row in df.iterrows():
if row['data'] == 'START':
counter += 1
df.loc[i, 'number'] = counter
Чтобы воспроизвести пример кадра данных
import pandas as pd
data = ['blah'] * 10
data[0], data[6] = ['START'] * 2
data[5], data[-1] = ['END'] * 2
df = pd.DataFrame({'data':data})