列内の一意の値を見つけて、それらを並べ替えます


84

パンダのデータフレームがあります。その列の1つの一意の値を昇順で出力したいと思います。これは私がそれをしている方法です:

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

sortediterableのアイテムから新しいソート済みリストを返します。

コード

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]

11

unique()の代わりに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()[0.18パンダ]速くユニークより()14107693行のデータフレームに3倍に
fixxxer

7

私はワンライナーが好きです:

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

6

今日、私自身が質問に出くわしました。あなたのコードが「なし」(同じメソッドを使用して得たものとまったく同じ)を返す理由は、

a.sort()

リストを変更するためにsort関数を呼び出しています。私の理解では、これは変更コマンドです。結果を表示するには、print(a)を使用する必要があります。

私がパンダですべてを維持しようとしたときの私の解決策:

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

値を最後にpandas置きNaN、混合型の配列で機能するため、このソリューションが気に入っています。
HS-星雲

4

とにかくパンダがバックグラウンドで行っていることなので、numpyのソートを使用することをお勧めします:

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]
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.