Python
 Computer >> コンピューター >  >> プログラミング >> Python

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]]のようにインデックスのリストを渡して新しいデータフレームを作成する方法もあります。用途に応じて使い分けるとよいでしょう。

  1. 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

  2. 【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