pandas value_count () показывает разные значения при каждом перезапуске ноутбука

#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')