Ваша логика в порядке, вы просто не должны повторять самую дорогую часть - подсчет. Сохраните это в переменной и используйте повторно. Вам также может не потребоваться получить базовый массив NumPy, часто достаточно pd.Index
объектов:
sr = pd.Series([5, 5, 5, 6, 6, 6, 7, 7, 8, 8, 8])
counts = sr.value_counts()
res = counts[counts == 3].index
# Int64Index([8, 6, 5], dtype='int64')
Причина, по которой нет готового метода для того, что вам нужно, заключается в том, что любое решение потребует минимальной временной сложности O ( n ), которая равна сложности value_counts
. Обойти это невозможно.
Одна альтернатива, dict
на основе collections.Counter
, будет менее эффективной, когда дело доходит до фильтрации по количеству. Поскольку массивы NumPy эффективно хранятся в памяти, логическая фильтрация эффективна относительно итераций словаря.