PythonのPandasのカラムの並び替えについて

Python,イメージ

AI実装検定のご案内

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のカラムの並び替えについてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次