#python #pandas #jupyter-notebook #jupyter #jupyter-lab
#python #pandas #jupyter-notebook #jupyter #jupyter-lab
Вопрос:
Каждый раз, когда я перезапускаю свой jupyter-lab
ноутбук, value_count()
отображаются разные значения.
bid = customers['BasketID']
bid.value_counts()
Вот результаты двух выполнений:
576339 542
573585 535
579196 533
580727 529
578270 442
...
563453 1
C567706 1
548001 1
C546895 1
574519 1
Name: BasketID, Length: 24627, dtype: int64
576339 542
573585 535
579196 533
580727 529
578270 442
...
C562808 1
575205 1
549004 1
C542991 1
565577 1
Name: BasketID, Length: 24627, dtype: int64
Как вы можете видеть, всегда есть разные числа, начинающиеся с буквы.
Поскольку в ноутбуке я должен ссылаться на одно из этих чисел, я не могу менять его на каждой итерации.
Есть ли способ сделать вывод метода детерминированным?
Я предполагаю, что это странное поведение связано с алгоритмом сортировки, используемым методом. Может быть, есть способ увидеть / установить начальное значение для генератора случайных чисел, используемого алгоритмом?
Комментарии:
1. Может быть, все такие C-коды имеют количество 1? Кажется, их очень мало, можете ли вы посмотреть,
df[df['BasketId'].str.startswith('C')]
чтобы получить полный список таких элементов.2. Вместо того, чтобы беспокоиться о порядке, в котором он хранится, почему вы не можете получить связанное значение с помощью
.loc
?bid.value_counts().loc["C567706"]
3. @CameronRiddell потому что это не то, что мне нужно. Что мне нужно, так это показать, что в столбце есть нечисловые значения.
Ответ №1:
value_counts
по умолчанию имеет sort=True
, который, скорее всего, использует быструю сортировку для сортировки. Вы можете попробовать отключить это с sort=False
помощью, которая возвращает серию с отсортированным индексом:
bid.value_counts(sort=False)
Если вам все еще нужна отсортированная серия, вы можете выполнить сортировку вручную sort_values
и использовать стабильный mergesort
метод:
bid.value_counts(sort=False).sort_values(ascending=False, kind='mergesort')