18. Pandasでデータ分析

Pandas DataFrameのソート徹底解説(index、列名、指定した値(sort_values))

更新日:

DataFrameに表示されているデータは、様々な方法でソートすることができます。
 
主なソート方法は、

  • インデックスによるソート
  • 列名によるソート
  • 指定した列の値によるソート

また昇順、降順のいずれも指定することができます。
 
このページでは、次のような商品マスタ情報を格納するDataframe df1を元に、様々なDataFrameのソート方法をご紹介いたします。

In [1]: import pandas as pd
...: list1 = [["P001","iPhone 8 64GB",85000],
...:             ["P002","iPhone X 256GB",130000],
...:             ["P003","iPhone SE 32GB",37000]] ...: columns1 = ["Product ID","Product Name","Price (JPY)"] ...: df1 = pd.DataFrame(data=list1,columns=columns1)
...: df1.set_index("Product ID", inplace=True)
...: df1
Out[1]:

 

著書紹介(清水 義孝)

好評発売中!!

Pandas DataFrameにおけるインデックスによるソート(sort_index)

インデックスによるソートは、sort_indexを利用します。引数ascendingにTrueを指定すると昇順、Falseを指定すると降順にソートされます。何も指定しなければ、Trueの昇順になります。
 
また引数inplaceは、ソート結果でDataFrameを置き換えるか否かを指定します。何も指定しなければ、Falseの置き換えないになります。

DataFrame.sort_index(ascending=True/False, inplace=True/False)

 
それでは、先ほど定義したDataFrame df1をインデックス”Product ID”の降順でソートしてみます。引数ascendingにはFalse(降順)を指定します。

In [2]: df1.sort_index(ascending=False, inplace=True)
...: df1
Out[2]:

インデックス”Product ID”について、上から”P003”、”P002”、”P001”というように降順でソートされていることがわかります。
 
 
 

著書紹介(清水 義孝)

好評発売中!!

Pandas DataFrameにおける列名によるソート(sort_index)

滅多に使うことは無いかも知れませんが、参考までに列名によるソートは、sort_indexの引数axisに1(列名によるソート)を指定します。引数axisを指定しなければ、0(インデックスによるソート)になります。
 
インデックスに指定されている列以外の列について、列名でソートされます。
 
df1を列名で降順にソートします。

In [3]: df1.sort_index(axis=1, ascending=False)
...: df1
Out[3]:

列名について、左から”Product Name”、”Price(JPY)”というように降順でソートされていることがわかります。
 
 
 

著書紹介(清水 義孝)

好評発売中!!

Pandas DataFrameにおける指定した列の値によるソート(sort_values)

指定した列の値によるソートは、sort_valuesを用います。引数byで値に基づくソートを行う対象の列を指定します。

DataFrame.sort_values(by=列名, ascending=True/False)

 
DataFrame df1の列"Price (JPY)"の値を元に、昇順にソートします。引数ascendingに何も指定しなかれば、昇順になります。

In [4]: df1.sort_values(by="Price (JPY)")
...: df1
Out[4]:

df1の列"Price (JPY)"の値について、上から37000, 85000, 130000と昇順に並んでいることがわかります。
 
 
次にDataFrame df1の列"Price (JPY)"の値を元に、降順にソートします。この場合、引数ascendingには、Falseを指定します。

In [5]: df1.sort_values(by="Price (JPY)", ascending=False)
...: df1
Out[5]:

df1の列"Price (JPY)"の値について、上から130000, 85000, 37000と降順に並んでいることがわかります。
 
 
関連記事です。
Pandasの中心となるDataFrame(データフレーム)については、次の記事で詳しく解説しております。

 

-18. Pandasでデータ分析

Copyright© AI-interのPython3入門 , 2019 All Rights Reserved.