У меня есть такой фрейм данных:
a | b | c
a 1 2
b 1 3
c 1 1
d 2 2
e 2 3
f 2 1
Я бы хотел перемешать строки, чтобы уменьшить количество последовательных повторов в B
, при этом располагая их в последовательном порядке в C
в максимально возможной степени.Фрейм данных может иметь сотни строк.
Требуемый вывод для указанного выше фрейма данных может выглядеть следующим образом:
a | b | c
c 1 1
f 2 1
a 1 2
d 2 2
b 1 3
e 2 3
В столбце B
нет последовательных дубликатов, а C
- этов максимально возможной последовательности на основе строк в кадре данных.C
может принимать значения от 1 до 5, в то время как B
может иметь много разных значений.
Если критерии больше не могут быть выполнены, и в фрейме данных все еще есть строки, можно поставитьряд (ы) где-нибудь в кадре данных (если это проще).
До сих пор мне был показан способ гарантировать, что последовательные значения не встречаются в B
:
np.random.seed(0)
(df.groupby(df.groupby('B').cumcount(), group_keys=False)
.apply(lambda x: x.sample(frac=1))
.reset_index(drop=True))
Но мне сложно заставить его включить в код последовательность столбцов C
.
Заранее спасибо!