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

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

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

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

Ответ 1

sorted возвращает новый отсортированный список из элементов в iterable.

КОД

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

OUTPUT

[1, 2, 3, 6, 8]

Ответ 2

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

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]

Ответ 3

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

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

Ответ 4

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

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

Но все действия в pandas также действительны.

Ответ 5

Я предпочитаю oneliner:

print(sorted(df['Column Name'].unique()))

Ответ 6

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

a.sort()

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

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

pd.Series(df['A'].unique()).sort_values()

Ответ 7

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

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

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

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

Ответ в списке Тип:

[1, 2, 3, 6, 8]