PythonのPandasライブラリでDataFrameのカラム(列)の並び替えを行う方法について、体系的かつ実用的に解説します。
初心者から中級者向けに、基本的な操作から応用的なテクニックまで網羅します。
目次
基本:カラムの並び替えとは?
PandasのDataFrame
におけるカラムの並び替えとは、データの中身はそのままで、列の表示順序だけを変更する操作です。
たとえば、
import pandas as pd
# サンプルデータフレームの作成
df = pd.DataFrame({
'C': [7, 8, 9],
'A': [1, 2, 3],
'B': [4, 5, 6]
})
print("元のDataFrame:")
print(df)
このdf
は以下のようになっています。
元のDataFrame:
C A B
0 7 1 4
1 8 2 5
2 9 3 6
この列順(C, A, B)をたとえば「A, B, C」に並び替えたい場合の方法がいくつかあります。
明示的に並び替える方法(列名を指定)
例:列名を直接並び替える
df1 = df[['A', 'B', 'C']] # 手動で順序を指定
print(" 1. カラムを明示的に並び替えた結果:")
print(df1)
これは、指定した順番で新しいDataFrameを再構成しています。
最もシンプルで確実な方法です。
ソートして並び替える方法(自動でアルファベット順など)
アルファベット順にソート(昇順)
df2 = df[sorted(df.columns)]
print("2. カラムをアルファベット順(昇順)に並び替えた結果:")
print(df2)
アルファベット順にソート(降順)
df3 = df[sorted(df.columns, reverse=True)]
print(" 3. カラムをアルファベット順(降順)に並び替えた結果:")
print(df3)
この方法は列が多くて、手動で並び順を指定するのが面倒な場合に便利です。
特定の列を先頭に持ってくる(応用)
A列を先頭、残りはそのまま
cols = df.columns.tolist()
cols.insert(0, cols.pop(cols.index('A')))
df4 = df[cols]
print(" 4. 'A'列を先頭に移動:")
print(df4)
これで「A → 残りの列の順」で並び替えられます。
条件付きで列を並び替える(柔軟なテクニック)
特定の列を最後に移動する
last_cols = ['C']
df5 = df[[col for col in df.columns if col not in last_cols] + last_cols]
print(" 5. 'C'列を最後に移動:")
print(df5)
特定の列以外をアルファベット順にして、指定列は先頭に
first_cols = ['A']
other_cols = sorted([col for col in df.columns if col not in first_cols])
df6 = df[first_cols + other_cols]
print(" 6. 'A'列を先頭にし、残りをアルファベット順に並び替え:")
print(df6)
列のインデックス番号で並び替える
もし列の順序をインデックスで指定したい場合は、以下のようにします。
df7 = df.iloc[:, [1, 2, 0]] # 'A', 'B', 'C' の順
print(" 7. カラムをインデックス指定で並び替え:")
print(df7)
この方法は列名ではなく位置で並び替えるため、列名が不明な場合や自動処理向きです。
列名に基づく柔軟な並び替え関数を作る
関数例:指定列を先頭に、残りをアルファベット順に並べる
def reorder_columns(df, first_cols=[]):
all_cols = df.columns.tolist()
other_cols = sorted([col for col in all_cols if col not in first_cols])
return df[first_cols + other_cols]
df8 = reorder_columns(df, first_cols=['A'])
print(" 8. 関数を使って'A'を先頭、それ以外はアルファベット順:")
print(df8)
汎用性が高く、再利用可能です。
実務でよくある並び替えパターン
ケース | 対応方法例 |
---|---|
IDや日時を先頭にしたい | ['ID', 'Date'] + [col for col in df.columns if col not in ['ID', 'Date']] |
数値列を後ろにまとめたい | df[[col for col in df.columns if df[col].dtype != 'int64'] + [col for col in df.columns if df[col].dtype == 'int64']] |
特定キーワードを含む列を前に持ってくる | [col for col in df.columns if 'sales' in col] + [col for col in df.columns if 'sales' not in col] |
まとめ:使い分けのヒント
目的 | 方法 |
---|---|
明確な順序を指定したい | df[['A', 'B', 'C']] |
自動でアルファベット順に並べたい | df[sorted(df.columns)] |
特定列を先頭または末尾に | insert +リスト操作 or リスト内包表記 |
頻繁に並び替える処理を汎用化したい | 関数化する(reorder_columns など) |
以上、PythonのPandasのカラムの並び替えについてでした。
最後までお読みいただき、ありがとうございました。