【Python】リスト内のDataFrameを並び替える(ソートする)方法

本記事ではリストに入ったDataFrameの順序を並び替える方法について紹介しています.

事前準備

まずはサンプルのDataFrameを3つ作成し,順不同でリストに格納します.


import pandas as pd

c = ['get_date', 'col_1']
df1 = pd.DataFrame([['2023-02-01', 'アジ'], ['2023-02-01', 'サバ']], columns=c)
df2 = pd.DataFrame([['2023-02-02', 'ホタテ'], ['2023-02-02', 'アサリ']], columns=c)
df3 = pd.DataFrame([['2023-02-03', 'エビ'], ['2023-02-03', 'カニ']], columns=c)

# 各DataFrameを順不同でリストに格納
df_l = [df3, df1, df2]

リストに入ったDataFrameを並び替える

リストに格納したDataFrameを順番に表示してみると以下のようになります.


for df in df_l:
    display(df)
get_date col_1
0 2023-02-03 エビ
1 2023-02-03 カニ
get_date col_1
0 2023-02-01 アジ
1 2023-02-01 サバ
get_date col_1
0 2023-02-02 ホタテ
1 2023-02-02 アサリ

次にリスト内のDataFrameを並び替えて順に表示してみましょう.


df_ls = sorted(df_l, key=lambda x: x['get_date'][0])

for df in df_ls:
    display(df)
get_date col_1
0 2023-02-01 アジ
1 2023-02-01 サバ
get_date col_1
0 2023-02-02 ホタテ
1 2023-02-02 アサリ
get_date col_1
0 2023-02-03 エビ
1 2023-02-03 カニ

解説

上記のコードでは,Pythonの組み込み関数sortedを使用して並び替えをした上で,DataFrameを順番に表示しています.
sortedの引数keyにlambda関数を使うことで,リストの各DataFrameにおけるget_dateの最初の値を基準に並び替えを行うように指定しています.

注意

(当然ですが)この方法は各DataFrameのget_date列が同じ値でないと使えません.
日付や何らかの種類でまとまったデータの列を基準にすることが必要です.

ひとこと

日付ごとにまとまったデータを扱う際に使用しました.
あまり使い所はないですが,何かの役に立てば幸いです.