Я ищу способ сделать эквивалент SQL
SELECT DISTINCT col1, col2 FROM dataframe_table
Сравнение pandas sql ни о чем не говорит distinct
.
.unique()
работает только для одного столбца, поэтому я полагаю, что могу объединить столбцы или поместить их в список / кортеж и сравнить таким образом, но похоже, что панды должны делать более естественным образом.
Я упускаю что-то очевидное или нет способа сделать это?
df.apply(pd.Series.unique)
но это не сработает, если количество уникальных значений варьируется в зависимости от столбца, поэтому вам придется создать dict из имен столбцов в качестве ключей и уникальных значений в качестве значенийОтветы:
Вы можете использовать этот
drop_duplicates
метод для получения уникальных строк в DataFrame:Вы также можете
subset
указать аргумент ключевого слова, если хотите использовать только определенные столбцы для определения уникальности. См. Строку документации .источник
df.drop_duplicates()
по умолчанию это не метод на месте, поэтому он возвращает новый DataFrame (оставляяdf
без изменений). Это довольно стандартное поведение, но оно может быть полезным.Я пробовал разные решения. Сначала было:
и он хорошо работает для не объектных данных Другой способ сделать это и избежать ошибки (для типа столбцов объекта) - применить drop_duplicates ()
Вы также можете использовать SQL для этого, но в моем случае он работал очень медленно:
источник
Не существует
unique
метода для df, если бы количество уникальных значений для каждого столбца было одинаковым, то работало бы следующее:df.apply(pd.Series.unique)
но если нет, то вы получите сообщение об ошибке. Другой подход - сохранить значения в dict, который вводится в имя столбца:источник
np.unique(df[['column1','column2']].values)
Для решения подобной проблемы я использую
groupby
:Однако будет ли это уместным, будет зависеть от того, что вы хотите сделать с результатом (в моем случае мне просто нужен был эквивалент,
COUNT DISTINCT
как показано).источник
Я думаю, что использование
drop duplicate
иногда будет не так полезно в зависимости от фрейма данных.Я нашел это:
И работай на меня!
https://riptutorial.com/pandas/example/26077/select-distinct-rows-across-dataframe
источник
Вы можете взять наборы столбцов и просто вычесть меньший набор из большего набора:
источник