PythonでPandasデータフレームの最後の2行を入れ替える方法
Pandasのデータフレームを扱う際、行の順序を入れ替えたいケースはよくあります。ここでは、データフレームの最後の2行を入れ替える方法を解説します。
実行結果のイメージ
例として、以下のような学生の成績データを持つデータフレームを用意し、最後の2行(AlexとSerina)を入れ替えます。
Before swapping
Name Age Maths Science English
0 David 13 98 75 79
1 Adam 12 59 96 45
2 Bob 12 66 55 70
3 Alex 13 95 49 60
4 Serina 12 70 78 80
After swapping
Name Age Maths Science English
0 David 13 98 75 79
1 Adam 12 59 96 45
2 Bob 12 66 55 70
3 Serina 12 70 78 80
4 Alex 13 95 49 60
このように、インデックス3と4の行が入れ替わっていることが確認できます。
解決のアプローチ
最後の2行を入れ替えるには、以下の手順で処理を行います。
まず、対象となるデータフレームを定義します。
iloc[-1]を使って最終行のデータを一時変数(temp)に退避させます。最後から2番目の行の値を最終行に代入し、退避しておいた一時変数の値を最後から2番目の行に代入します。
手順1:最終行を一時変数に保存する
temp = df.iloc[-1]
iloc[-1]は負のインデックス指定により、データフレームの最終行を取得します。これをtemp変数に格納しておきます。
手順2:2つの行の値を入れ替える
df.iloc[-1] = df.iloc[-2] df.iloc[-2] = temp
最初に最後から2番目の行(iloc[-2])の値を最終行(iloc[-1])に上書きし、その後に一時変数tempに保存しておいた元の最終行の値を、最後から2番目の行に代入することで、2行が完全に入れ替わります。
完全なコード例
理解を深めるために、実際のコード全体を見てみましょう。
import pandas as pd
data = {'Name': ['David', 'Adam', 'Bob', 'Alex', 'Serina'],
'Age' : [13,12,12,13,12],
'Maths': [98, 59, 66, 95, 70],
'Science': [75, 96, 55, 49, 78],
'English': [79, 45, 70, 60, 80]}
df = pd.DataFrame(data)
print("Before swapping\n", df)
# 最終行を一時変数に退避
temp = df.iloc[-1]
# 行を入れ替え
df.iloc[-1] = df.iloc[-2]
df.iloc[-2] = temp
print("After swapping\n", df)
出力結果
Before swapping
Name Age Maths Science English
0 David 13 98 75 79
1 Adam 12 59 96 45
2 Bob 12 66 55 70
3 Alex 13 95 49 60
4 Serina 12 70 78 80
After swapping
Name Age Maths Science English
0 David 13 98 75 79
1 Adam 12 59 96 45
2 Bob 12 66 55 70
3 Serina 12 70 78 80
4 Alex 13 95 49 60
補足:任意の2行を入れ替える場合
同じ考え方は、最終行以外の任意の行にも応用できます。例えば、インデックス0と1の行を入れ替える場合は次のように書けます。
temp = df.iloc[0] df.iloc[0] = df.iloc[1] df.iloc[1] = temp
なお、元のデータフレームを変更せずに行の順序だけを変更したい場合は、df.iloc[[4, 3, 2, 1, 0]]のようにインデックスのリストを渡して新しいデータフレームを作成する方法もあります。用途に応じて使い分けるとよいでしょう。
-
PythonでDataFrameからランダムな行を1つ選択する方法
はじめにpandasのDataFrameからランダムに行を1つ選択したい場面は、データ分析やサンプリング処理でよくあります。この記事では、Pythonのrandomモジュールとilocを組み合わせて、DataFrameから任意の1行をランダムに抽出するコードを紹介します。入力データと出力イメージ例として、次のようなサンプルDataFrameを想定します。 Id Name0 1 Adam1 2 Michael2 3 David3 4 Jack4 5 Peter実行すると、以下のようにランダムに選ばれた1行が出力されます(実行するたびに結果は変わります)。Random row is&nb
-
【Python】Name列を基準にDataFrameを降順に並べ替えるプログラムの作成方法
はじめにpandasのDataFrameを特定の列(ここでは「Name」列)を基準に降順で並べ替える方法を解説します。データ分析では、名前のアルファベット順や数値の大小に応じてデータを整理したい場面がよくあります。そんなときに活躍するのが sort_values() メソッドです。入力データ以下のサンプルDataFrameを想定します。 Id Name 0 1 Adam 1 2 Michael 2 3 David 3 4 Jack 4 5 Peter出力結果Name列を基準に降順でソートすると、次のようになります。 Id