У меня есть фрейм данных:
ID Status
100 X
100 Y
100 Y
100 Z
100 A
100 Y
100 Y
100 Y
100 X
100 X
100 Y
100 Y
200 A
200 B
200 Y
200 Y
200 C
200 Y
200 Y
200 Z
Для каждого непоследовательного вхождения элемента Y я хочу, чтобы Состояние изменялось в зависимости от того, сколько раз появляется Y.Мой ожидаемый результат:
ID Status
100 X
100 Y
100 Y
100 Z
100 A
100 Y1
100 Y1
100 Y1
100 X
100 X
100 Y2
100 Y2
200 A
200 B
200 Y
200 Y
200 C
200 Y1
200 Y1
200 Z
Я пробовал следующее:
df['index'] = pd.np.where(df['Status']==Y, df.groupby(['ID']).cumcount(),0)
, который индексирует каждый случай Y. Затем я считаю разницу следующим образом:
df['diff'] = df['index'] - df['index'].shift(1)
Затем я выбираю каждую точку. Df ['diff']> 1 становится новым значением статуса, 'Y1'.
df['Status']=pd.np.where(df['diff']>1, 'Y1', df['Status'])
Выше, однако, идентифицируется каждая точкагде Y встречается.Мне нужно отфильтровать первый раз, когда происходит Y и решить для последующих случаев.Я в порядке даже со следующим выводом:
ID Status
100 X
100 Y
100 Y
100 Z
100 A
100 Y1
100 Y1
100 Y1
100 X
100 X
100 Y1
100 Y1
200 A
200 B
200 Y
200 Y
200 C
200 Y1
200 Y1
200 Z