Настройка
Добавлены дополнительные данные с несколькими кластерами
df = pd.DataFrame({'col': [*map(int, '1552554442')]})
Две интерпретации
Мы должны рассмотреть, когда существуют несмежные кластеры
df
col
0 1 # First instance of `1` Next unique is `5`
1 5 # First instance of `5` Next unique is `2`
2 5 # Next unique is `2`
3 2 # First instance of `2` Next unique is `4` because `5` is not new
4 5 # Next unique is `4`
5 5 # Next unique is `4`
6 4 # First instance of `4` Next unique is null
7 4 # First instance of `4` Next unique is null
8 4 # First instance of `4` Next unique is null
9 2 # Second time seen `2` Should Next unique be null or what it was before `4`
Разрешено оглядываться назад
Использовать factorize
и добавлять 1
.Это очень похоже на ответ @ Wen
i, u = df.col.factorize()
u_ = np.append(u, -1) # Append an integer value to represent null
df.assign(addedcol=u_[i + 1])
col addedcol
0 1 5
1 5 2
2 5 2
3 2 4
4 5 2
5 5 2
6 4 -1
7 4 -1
8 4 -1
9 2 4
Only Forward
Аналогично предыдущему, за исключением того, что мы будем отслеживать совокупное максимальное факторизованное значение
i, u = df.col.factorize()
u_ = np.append(u, -1) # Append an integer value to represent null
x = np.maximum.accumulate(i)
df.assign(addedcol=u_[x + 1])
col addedcol
0 1 5
1 5 2
2 5 2
3 2 4
4 5 4
5 5 4
6 4 -1
7 4 -1
8 4 -1
9 2 -1
Вы заметите, что разница в последнем значении.Когда мы можем только смотреть вперед, мы видим, что следующего уникального значения не существует.