HOWTO · Pandas

Pandas で列にスカラーを掛ける

このチュートリアルでは、問題なく Pandas データフレーム列をスカラー値で乗算する方法について説明します。

データの入力からそのデータのクリーニングまで、多くのデータフレーム操作に Pandas を使用しています。 Pandas データフレームは、Python を使用したデータおよび数学演算のメソッドを提供します。

さまざまな数学演算を実行するのは直感的ではないように思えるかもしれませんが、Python を使用すると、思ったよりもずっと簡単に実行できます。 そのような操作の 1つは、Pandas 列をスカラー値で乗算することです。

この記事では、さまざまな複雑さの中で Pandas で列をスカラーで乗算する 5つの方法を示します。

インプレース代入を使用して、Pandas で列をスカラーで乗算する

インプレース代入を使用してパンダのスカラー値で列を乗算する方法に入る前に、達成しようとしていることを紹介しましょう。

7つの列を持つデータフレームがあります。

7 列のデータフレーム

ここで、列 (one) をスカラー値 (5) で乗算します。

7列の乗算データフレーム

では、どうすればそれを達成できるでしょうか。 最初のアプローチは、インプレース代入を使用することです。これは、値の代入に加えて、値を操作する操作です。

インプレース代入を使用して、最初のオペランド変数の値を、オペランドの値に対して実行された演算の結果で上書きします。 視覚的には、x *= 3x = x * 3 と同等であり、変数 x が保持する値は 3 で乗算され、同じ変数 x に割り当てられます。

これを説明するために、列名を割り当て、one 列でインプレース割り当てを実行する ones が入力された 6 行 7 列の Pandas データフレームを作成できます。

import pandas as pd
import numpy as np

df = pd.DataFrame(
    np.ones((6, 7)), columns=["one", "two", "three", "four", "five", "six", "seven"]
)

print(df)

出力:

one  two  three  four  five  six  seven
0  1.0  1.0    1.0   1.0   1.0  1.0    1.0
1  1.0  1.0    1.0   1.0   1.0  1.0    1.0
2  1.0  1.0    1.0   1.0   1.0  1.0    1.0
3  1.0  1.0    1.0   1.0   1.0  1.0    1.0
4  1.0  1.0    1.0   1.0   1.0  1.0    1.0
5  1.0  1.0    1.0   1.0   1.0  1.0    1.0

インプレース代入を使用するには、ドット表記またはブラケット表記を使用して、スカラー値で乗算する Pandas 列を選択する必要があります。 括弧表記を使用して、one 列を選択します。

df["one"] *= 5

print(df)

出力:

one  two  three  four  five  six  seven
0  5.0  1.0    1.0   1.0   1.0  1.0    1.0
1  5.0  1.0    1.0   1.0   1.0  1.0    1.0
2  5.0  1.0    1.0   1.0   1.0  1.0    1.0
3  5.0  1.0    1.0   1.0   1.0  1.0    1.0
4  5.0  1.0    1.0   1.0   1.0  1.0    1.0
5  5.0  1.0    1.0   1.0   1.0  1.0    1.0

ご覧のとおり、one 列はスカラー値 (5) で乗算されています。

multiply 関数を使用して、Pandas で列をスカラーで乗算する

インプレース代入アプローチで乗算演算子を使用する代わりに、Pandas が提供する multiply メソッド を使用できます。 必要な列にメソッドを適用し、multiply メソッドの引数としてスカラー値を渡します。

multiply メソッドを紹介するために、列 two にスカラー値 7 を掛けます (ドット表記を使用して列 two にアクセスします)。

df.two = df.two.multiply(7)
print(df)

出力:

one  two  three  four  five  six  seven
0  5.0  7.0    1.0   1.0   1.0  1.0    1.0
1  5.0  7.0    1.0   1.0   1.0  1.0    1.0
2  5.0  7.0    1.0   1.0   1.0  1.0    1.0
3  5.0  7.0    1.0   1.0   1.0  1.0    1.0
4  5.0  7.0    1.0   1.0   1.0  1.0    1.0
5  5.0  7.0    1.0   1.0   1.0  1.0    1.0

apply 関数を使用して、Pandas で列にスカラーを乗算する

multiply メソッドを使用した方法と同様に、apply メソッド (高階関数) を使用して、Pandas で列をスカラーで乗算できます。 apply メソッドは lambda 関数を受け取り、それが適用された列のセル要素に対してアクションを実行します。

そのため、lambda 関数を使用してセル要素に乗算アクションを指定できます。

これがどのように機能するかを説明するために、apply メソッドを使用して three 列 (前のセクションで使用したデータフレームから) を 9 で乗算します。

df["three"] = df["three"].apply(lambda x: x * 9)
print(df)

出力:

one  two  three  four  five  six  seven
0  5.0  7.0    9.0   1.0   1.0  1.0    1.0
1  5.0  7.0    9.0   1.0   1.0  1.0    1.0
2  5.0  7.0    9.0   1.0   1.0  1.0    1.0
3  5.0  7.0    9.0   1.0   1.0  1.0    1.0
4  5.0  7.0    9.0   1.0   1.0  1.0    1.0
5  5.0  7.0    9.0   1.0   1.0  1.0    1.0

three 列のすべてのセルが lambda 関数に基づいて 9 で乗算されていることがわかります。 このアプローチは面倒に思えるかもしれませんが、列に乗算する値がセルによって異なる場合、より機能的になります。

loc 演算子を使用して、Pandas で列にスカラーを掛ける

また、loc 演算子を使用して、Pandas で列にスカラーを掛けることもできます。 loc 演算子を使用すると、データフレームの一部にインデックスを付けることができます。

行と列に基づいてインデックスを作成できます。 私たちにとっては、必要な列に基づいてインデックスを作成する必要があります。

loc 演算子の典型的な構文を以下に示します。

DataFrame.loc[rows, columns]

ただし、列のみにアクセスするには、次の構文を使用できます。

DataFrame.loc[:, columns]

: は、すべての行が必要であることを示します。 上記の構文は、指定された列のすべての行にアクセスすることを意味します。

ここで、上記の構文を使用して列 four を取得し、インプレース代入を使用して値を 11 で乗算します。

df.loc[:, "four"] *= 11
print(df)

出力:

one  two  three   four  five  six  seven
0  5.0  7.0    9.0  11.0   1.0  1.0   1.0
1  5.0  7.0    9.0  11.0   1.0  1.0   1.0
2  5.0  7.0    9.0  11.0   1.0  1.0   1.0
3  5.0  7.0    9.0  11.0   1.0  1.0   1.0
4  5.0  7.0    9.0  11.0   1.0  1.0   1.0
5  5.0  7.0    9.0  11.0   1.0  1.0   1.0

これは不必要に長いように見えますが、複数の列を乗算する場合、このアプローチは機能します。 たとえば、列 fivesix13 で乗算する場合、列の名前を含むリストを loc 演算子の 2 番目の引数として渡します。

df.loc[:, ["five", "six"]] *= 13
print(df)

出力:

one  two  three  four  five   six  seven
0  5.0  7.0    9.0  11.0  13.0  13.0    1.0
1  5.0  7.0    9.0  11.0  13.0  13.0    1.0
2  5.0  7.0    9.0  11.0  13.0  13.0    1.0
3  5.0  7.0    9.0  11.0  13.0  13.0    1.0
4  5.0  7.0    9.0  11.0  13.0  13.0    1.0
5  5.0  7.0    9.0  11.0  13.0  13.0    1.0

iloc 演算子を使用して、Pandas で列にスカラーを掛ける

loc 演算子と同様に、アクセスする値のインデックスとして整数値のみを受け入れます。 列の名前を使用できる loc とは異なり、列のインデックス値を使用します。

また、インデックスは 1 ではなく 0 から始まることに注意してください。したがって、列 7 にアクセスして 15 を掛けたい場合は、インデックス値 6 を使用します。

df.iloc[:, 6] = df.iloc[:, 6] * 15
print(df)

出力:

one  two  three  four  five   six  seven
0  5.0  7.0    9.0  11.0  13.0  13.0   15.0
1  5.0  7.0    9.0  11.0  13.0  13.0   15.0
2  5.0  7.0    9.0  11.0  13.0  13.0   15.0
3  5.0  7.0    9.0  11.0  13.0  13.0   15.0
4  5.0  7.0    9.0  11.0  13.0  13.0   15.0
5  5.0  7.0    9.0  11.0  13.0  13.0   15.0