df = pd.DataFrame({'Col1': ['Bob', 'Joe', 'Bill', 'Mary', 'Joe'],
'Col2': ['Joe', 'Steve', 'Bob', 'Bob', 'Steve'],
'Col3': np.random.random(5)})
Как лучше всего вернуть уникальные значения Col1 и Col2?
Желаемый результат
'Bob', 'Joe', 'Bill', 'Mary', 'Steve'
df1.groupby(['A','B']).size().reset_index().rename(columns={0:'count'})
Ответы:
pd.unique
возвращает уникальные значения из входного массива, столбца или индекса DataFrame.Входные данные для этой функции должны быть одномерными, поэтому необходимо объединить несколько столбцов. Самый простой способ - выбрать нужные столбцы, а затем просмотреть значения в упорядоченном массиве NumPy. Вся операция выглядит так:
Обратите внимание, что
ravel()
это метод массива, который возвращает представление (если возможно) многомерного массива. Аргумент'K'
указывает методу сглаживать массив в том порядке, в котором элементы хранятся в памяти (pandas обычно хранит базовые массивы в непрерывном порядке Fortran ; столбцы перед строками). Это может быть значительно быстрее, чем использование порядка «C» по умолчанию.Альтернативный способ - выбрать столбцы и передать их
np.unique
:В этом нет необходимости,
ravel()
поскольку метод обрабатывает многомерные массивы. Даже в этом случае это, вероятно, будет медленнее, чемpd.unique
при использовании алгоритма на основе сортировки, а не хеш-таблицы для определения уникальных значений.Разница в скорости значительна для больших DataFrames (особенно, если есть только несколько уникальных значений):
источник
pd.DataFrame(unique_values)
. Нет хорошего способа напрямую вернуть DataFrame.Я установил
DataFrame
несколько простых строк в столбцах:Вы можете объединить интересующие вас столбцы и вызвать
unique
функцию:источник
Или:
источник
Обновленное решение с использованием numpy v1.13 + требует указания оси в np.unique при использовании нескольких столбцов, в противном случае массив неявно сглаживается.
Это изменение было внесено в ноябре 2016 г .: https://github.com/numpy/numpy/commit/1f764dbff7c496d6636dc0430f083ada9ff4e4be
источник
Не
pandas
решение: использование set ().Вывод:
источник
для тех из нас, кто любит все вещи pandas, apply и, конечно же, лямбда-функции:
источник
вот другой способ
источник
Результатом будет ['Мэри', 'Джо', 'Стив', 'Боб', 'Билл'].
источник