Знайдіть унікальні значення в стовпці, а потім сортуйте їх


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 sorts 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]

11

Ви також можете використовувати drop_duplicates () замість унікального ()

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

3
Встановлено, drop_duplicates()що він в 3 рази швидший за унікальний () у фреймі даних з 14107693 рядків [Pandas 0.18]
fixxxer 02


6

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

a.sort()

викликає функцію сортування для мутації списку a. На моє розуміння, це команда модифікації. Щоб побачити результат, потрібно скористатися print (a).

Моє рішення, оскільки я намагався тримати все в пандах:

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

Мені подобається pandasрішення, оскільки воно ставить NaNзначення в кінці і працює з масивами змішаних типів.
туманність HS

4

Я б запропонував використовувати numpy's sort, оскільки в будь-якому випадку панди роблять у фоновому режимі:

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

Але робити все в пандах також є дійсним.


0

Інший спосіб - використання встановленого типу даних.

Деякі характеристики наборів : набори не впорядковані, можуть включати змішані типи даних, елементи в наборі не можна повторювати, змінюються.

Вирішення Вашого питання:

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

Відповідь у списку :

[1, 2, 3, 6, 8]
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.