Znajdź unikalne wartości w kolumnie, a następnie je posortuj

84

Mam ramkę danych pandy. Chcę wydrukować unikatowe wartości jednej z jego kolumn w porządku rosnącym. Oto jak to robię:

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

Problem polega na tym, że otrzymuję Nonewyjście.

MAS
źródło
6
a.sort()modyfikuje ai niczego nie zwraca, więc zamień na:a.sort(); print a
stellasia

Odpowiedzi:

125

sortedzwraca nową posortowaną listę z elementów w iterowalnej.

KOD

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

WYNIK

[1, 2, 3, 6, 8]
Vineet Kumar Doshi
źródło
19

sort sortuje w miejscu, więc nic nie zwraca:

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)

Musisz więc zadzwonić print aponownie po wezwaniu do sort.

Na przykład.:

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
źródło
11

Możesz także użyć drop_duplicates () zamiast unique ()

df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
a = df['A'].drop_duplicates()
a.sort()
print a
Meloun
źródło
3
Stwierdzono, drop_duplicates()że jest 3 razy szybszy niż unique () w ramce danych zawierającej 14107693 wiersze [Pandas 0.18]
fixxxer
7

Wolę oneliner:

print(sorted(df['Column Name'].unique()))
MDMoore313
źródło
6

Sama sobie dzisiaj poradziłem z tym pytaniem. Myślę, że powodem, dla którego twój kod zwraca „Brak” (dokładnie to, co otrzymałem przy użyciu tej samej metody) jest to

a.sort()

wywołuje funkcję sortowania w celu zmiany listy a. W moim rozumieniu jest to polecenie modyfikacji. Aby zobaczyć wynik, musisz użyć print (a).

Moje rozwiązanie, ponieważ starałem się trzymać wszystko w pandach:

pd.Series(df['A'].unique()).sort_values()
Bowen Liu
źródło
Podoba mi się to pandasrozwiązanie, ponieważ umieszcza NaNwartości na końcu i działa z tablicami typów mieszanych.
Mgławica HS
4

Sugerowałbym użycie sortowania numpy, ponieważ tak czy inaczej pandy robią w tle:

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

Ale robienie wszystkiego w pandach jest również ważne.

Challensois
źródło
0

Innym sposobem jest użycie ustawionego typu danych.

Niektóre cechy zestawów : zestawy są nieuporządkowane, mogą zawierać mieszane typy danych, elementy zestawu nie mogą się powtarzać, są modyfikowalne.

Rozwiązując twoje pytanie:

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

Odpowiedź w typie listy :

[1, 2, 3, 6, 8]
Ivan Carrasco Quiroz
źródło