Pandas 列での一意の値を取得する

  1. unique メソッドで Pandas の DataFrame カラムの一意の値を取得する
  2. drop_duplicates メソッドを使って Pandas DataFrame のカラムの一意な値を取得する
  3. Pandas DataFrame で列を並べ替える

この記事では、Pandas の DataFrame の列の一意の値を取得する方法を紹介します。

例えば、個人とその職業で構成された DataFrame があり、その職業の総数を知りたいとします。この場合、多くの人が同じ仕事をしている可能性があるため、単純に行数の合計を使用して一意の職業の合計を決定することはできません。このような場合は、Pandas ライブラリが提供する unique()drop_duplicates() 関数を利用することができます。

また、DataFrame のソート方法を知っておくことも重要です。sorted()sort_values() 関数を利用することで、これを実現することができます。

このチュートリアルでは、以下の DataFrame をソートして削除します。

import pandas as pd
import numpy as np

df = pd.DataFrame({'A':[7,1,5,4,2,1,4,4,8],'B':[1,2,8,5,3,4,2,6,8]})

print(df)

出力:

   A  B
0  7  1
1  1  2
2  5  8
3  4  5
4  2  3
5  1  4
6  4  2
7  4  6
8  8  8

unique メソッドで Pandas の DataFrame カラムの一意の値を取得する

Pandas Series の unique() メソッドは、DataFrame の単一の列を扱うときに使用し、列のすべての一意な要素を返します。unique() 関数を使った最終的な出力は配列です。

例:

import pandas as pd
import numpy as np

df = pd.DataFrame({'A':[7,1,5,4,2,1,4,4,8],'B':[1,2,8,5,3,4,2,6,8]})

print(df['A'].unique())
print(type(df['A'].unique()))

出力:

[7 1 5 4 2 8]
numpy.ndarray

drop_duplicates メソッドを使って Pandas DataFrame のカラムの一意な値を取得する

drop_duplicates() は、DataFrame またはそのサブセットに適用することができ、DataFrame オブジェクトの型を保持します。また、巨大なデータセットを扱う際には、重複した値を削除するための高速なオプションと考えられています。

import pandas as pd
import numpy as np

df = pd.DataFrame({'A':[7,1,5,4,2,1,4,4,8],'B':[1,2,8,5,3,4,2,6,8]})

print(df.drop_duplicates(subset = "A"))
print(type(df.drop_duplicates(subset = "A")))

出力:

   A  B
0  7  1
1  1  2
2  5  8
3  4  5
4  2  3
8  8  8
pandas.core.frame.DataFrame

Pandas DataFrame で列を並べ替える

sorted() メソッドを用いてカラムをソートすることもできますが、最終的な結果はリスト型のオブジェクトに変換されます。reversed パラメータに True を指定することで、列値を降順にソートすることもできます。

以下の例では、カラムを昇順にソートし、重複した値を削除しています。

import pandas as pd
import numpy as np

df = pd.DataFrame({'A':[7,1,5,4,2,1,4,4,8],'B':[1,2,8,5,3,4,2,6,8]})

df_new = df.drop_duplicates(subset = "A")

print(sorted(df_new['A']))
print(type(sorted(df_new['A'])))

出力:

[1, 2, 4, 5, 7, 8]
list

sort_values() は、DataFrame をソートするためのもう一つの柔軟なオプションです。ここでは、by パラメータを使ってソートする列を指定し、ascending パラメータを使って昇順か降順かを指定します。これにより、オブジェクトの型は Pandas DataFrame として保持されます。

次の例では、カラムを降順にソートし、重複した値を削除します。

import pandas as pd
import numpy as np

df = pd.DataFrame({'A':[7,1,5,4,2,1,4,4,8],'B':[1,2,8,5,3,4,2,6,8]})

df_new = df.drop_duplicates(subset = "A")

print(df_new.sort_values(by = 'A', ascending = False))
type(df_new.sort_values(by = 'A'))

出力:

   A  B
8  8  8
0  7  1
2  5  8
3  4  5
4  2  3
1  1  2
pandas.core.frame.DataFrame

関連記事 - Pandas DataFrame

  • Pandas DataFrame 列を削除する方法
  • ヘッダー行を Pandas DataFrame に追加する方法