Найдите уникальные значения в столбце и отсортируйте их

84

У меня есть фреймворк pandas. Я хочу напечатать уникальные значения одного из его столбцов в порядке возрастания. Вот как я это делаю:

import pandas as pd
df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
a = df['A'].unique()
print a.sort()

Проблема в том, что я получаю Noneна выходе.

МАС
источник
6
a.sort()изменяет aи ничего не возвращает, поэтому замените на:a.sort(); print a
stellasia

Ответы:

125

sortedвернуть новый отсортированный список из элементов в итерации.

КОД

import pandas as pd
df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
a = df['A'].unique()
print sorted(a)

ВЫВОД

[1, 2, 3, 6, 8]
Винит Кумар Доши
источник
19

sort сортирует на месте, поэтому ничего не возвращает:

In [54]:
df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
a = df['A'].unique()
a.sort()
a

Out[54]:
array([1, 2, 3, 6, 8], dtype=int64)

Так что вам придется звонить print aснова после звонка sort.

Например.:

In [55]:
df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
a = df['A'].unique()
a.sort()
print(a)

[1 2 3 6 8]
EdChum
источник
11

Вы также можете использовать drop_duplicates () вместо unique ()

df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
a = df['A'].drop_duplicates()
a.sort()
print a
Мелун
источник
3
Оказалось, drop_duplicates()что он в 3 раза быстрее, чем unique () на фрейме данных из 14107693 строк [Pandas 0.18]
fixxxer
7

Я предпочитаю один лайнер:

print(sorted(df['Column Name'].unique()))
MDMoore313
источник
6

Сегодня сам столкнулся с этим вопросом. Я думаю, причина того, что ваш код возвращает «Нет» (именно то, что я получил, используя тот же метод), заключается в том, что

a.sort()

вызывает функцию сортировки для изменения списка a. В моем понимании это команда модификации. Чтобы увидеть результат, вы должны использовать print (a).

Мое решение, поскольку я пытался сохранить все в пандах:

pd.Series(df['A'].unique()).sort_values()
Боуэн Лю
источник
Мне нравится pandasрешение, потому что оно ставит NaNзначения в конце и работает с массивами смешанных типов.
HS-туманность
4

Я бы предложил использовать сортировку numpy, поскольку в любом случае это то, что pandas делает в фоновом режиме:

import numpy as np
np.sort(df.A.unique())

Но делать все в пандах тоже можно.

Challensois
источник
0

Другой способ - использовать заданный тип данных.

Некоторые характеристики наборов : наборы неупорядочены, могут включать смешанные типы данных, элементы в наборе не могут повторяться, изменчивы.

Решение вашего вопроса:

df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
sorted(set(df.A))

Ответ в виде списка :

[1, 2, 3, 6, 8]
Иван Карраско Кирос
источник