【Python】Pandasやリストで一意な値を取り出すunique関数の操作方法を紹介!

Pandas

この記事ではPandasで一意な値を取り出す方法を紹介します!
一意な値とはつまり被ってない値のことです。

例えば以下のようなDataFrameがあったとしましょう。

   0  1
0  A  A
1  B  B
2  C  B

被ってない値のリストがほしいなーと思ったとき、
0列目は値が被ってないのでそのまま値を取り出せばOKですが([A,B,C])、
1列目はBが被ってるのでそのまま取り出すと値が被ったリストが出来上がります([A,B,B]。

このように値が被っている場合でも被ってない値を取り出す便利な関数があります。
unique関数といいましてこれを使えば1列目の抽出結果は[A,B]となります。

今回はそんな一意な値を取り出すunique関数関係の操作について紹介します!

 

この記事の目標
・unique関数で一意な値のリストを作成できるようにする
・indexで一意な値のリストを作成できるようにする
・そもそもその列が一意かどうかを判定できるようにする

DataFrameとSeries型の違いがわからない人はまず以下の記事で理解しましょう!!
DataFrameとSeriesの違いを紹介
その他Pythonの記事は以下にまとめています!!

Python記事まとめ

[スポンサーリンク]


一意な値を抽出(unique)

実際に一意な被ってない値を抽出してみましょう!
冒頭で紹介したunique関数を用いて実行します。

記載方法は以下の通り

Series型.unique() 
#DataFrameでも列指定すればSeries型

Series型unique()をつけるだけなのでとってもシンプルです!
DataFrameの場合でも列指定すればSeries型になるので、DataFrameの場合は必ず列を指定しましょう!

では確認するにあたり以下のDataFrameを使用します。

import pandas as pd
df=pd.DataFrame([["A",1],["D",5],["C",4],["B",2],["A",1],["B",2]])
print(df)

"""
#print表示
  0 1
0 A 1
1 D 5
2 C 4
3 B 2
4 A 1
5 B 2
"""

0列目で確認していきますが、値をみると色んなアルファベットが混合してますね。
では実際に0列目をunique関数を用いて抽出します!

uni=df[0].unique()
print(uni)

#print表示
#['A' 'D' 'C' 'B']

結果を見るとA,D,C,Bと被っていない一意な値のリストが出来上がりました!

結果の順番がバラバラになってますが、結果を昇順に並べ直したい場合はsortメソッドを使用します。

uni.sort()
print(uni)

#print表示
['A' 'B' 'C' 'D']

これで昇順になりました。

 

一意なindexを抽出(index_unique)

前の項目では値を抽出してましたが、今度はindexを取り出したい場合です!
一意なindexを取り出したい場合はindex_unique関数を使用します。

記載方法は以下の通り

dataframe(またはSeries).index_unique()

DataFrameSeriesindex_uniqueをつけるだけです。
では実際に以下のDataFrameで使用して確認しましょう!

import pandas as pd
df_i=pd.DataFrame([["A","A"],["A","B"],["C","C"]],index=["a","b","a"])
print(df_i)

#print表示
#  0 1
#a A A
#b A B
#a C C

DataFrameindexを見るとa,b,aとaが被ってます。
index_uniqueを用いて抽出してみると…

i_uniq=df_i.index.unique()
print(i_uniq)

#print表示
#Index(['a', 'b'], dtype='object')

a,bと一意なindexの値を取り出せました!

ただし結果はインデックスオブジェクトに格納されており、
このままでは少し使いずらいのでリストに変換してみましょう。

print(list(i_uniq))
#print表示
#['a', 'b']

これで結果がリストになりました!

 

一意であるか調べる(is_unique)

一意かどうかを調べたい!という場合に便利なのがis_uniqueメソッドです!
このメソッドを用いることで一意であればTrue、異なればFalseを返します。

記載方法は以下の通り

Series.is_unique 
#DataFrameでも列指定すればSeries

DataFrameの場合は列指定すればSeries型になります。

では以下のDataFrameを用いて確認します!

import pandas as pd
df_u=pd.DataFrame([["A","A"],["A","B"],["C","C"]])
print(df_u)

#print表示
#  0 1
#0 A A
#1 A B
#2 C C

このDataFrameは0列目が一意でない、1列目が一意な値となっています。
つまり0列目でFalse、1列目でTrueが表示されればOKです。
では実際に使用します!

print(df_u[0].is_unique)
#print表示
#False

print(df_u[1].is_unique)
#print表示
#True

予想通り、0列目はFalse、1列目はTrueが表示されました!

[スポンサーリンク]


コメント

  1. […] ・DataFrameやSeriesのソート ・一意な値の取り出し […]

タイトルとURLをコピーしました