0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【python】pandasの活用~2回目:axisの使い方~

Last updated at Posted at 2021-08-22

はじめに

  • バージョン
    • Python: 3.6.8
    • pandas: 1.1.5
  • 概要
    • pandasを理解する上で、axisの使い方を理解するのは重要なので以下の表を使って理解を深めます。
- a b c
0 1 2 3
1 4 5 6
2 7 8 9

今回紹介するのは以下のパターンです。

    1. 列 or 行ごとの最大値を抽出する
    1. 行ごとの計算を行う
    1. 関数を用いて行ごとの計算を行う

1. 列 or 行ごとの最大値を抽出する

1-1. 書き方

 表のデータを参照する際に、参照するデータが列ごとなのか、行なのかを指定する必要があります。
これに該当するパラメータがaxisです。デフォルトがaxis=0で列ごとにデータを参照します
axis=1にすると行ごとにデータを参照します。書き方は以下です。

  • 列ごとの最大値を抽出する
    • デフォルトがaxis=0なので記載不要
DataFrame名.max()
  • 行ごとの最大値を抽出する
DataFrame名.max(axis=1)

1-2. サンプルコード

 特筆すべき点はありませんが、axis=1は忘れがちなので注意しましょう。

test_max.py
import pandas as pd


def main():

    df = pd.DataFrame(
        data=[[1, 2, 3], [4, 5, 6], [7, 8, 9]],
        columns=["a", "b", "c"],
    )

    print("base DataFrame")
    print(df)
    print("")

    print("result: default(axis=0)")
    print(df.max())
    print("")

    print("result: axis=1")
    print(df.max(axis=1))


if __name__ == "__main__":
    main()

1-3. 実行結果

 想定通り、列ごとと行ごとの最大値が抽出出来ました。

base DataFrame
   a  b  c
0  1  2  3
1  4  5  6
2  7  8  9

result: default(axis=0)
a    7
b    8
c    9
dtype: int64

result: axis=1
0    3
1    6
2    9
dtype: int64

2. 行ごとの計算を行う

2-1. 書き方

 ここでaxisの使い方はそこまで重要ではありませんが、まずは基本的な行ごとの計算を行います。
まず、DataFrameの列を抽出する場合は、以下のように記載します。

DataFrame名[列名]

 今回はa列、b列、c列の合計値を計算するので、その結果を新しい列(result)に記載しましょう。

df["result"] = df["a"] + df["b"] + df["c"]

 ちなみに、sumを使う場合は、maxを使う場合と同様に以下のように記載します。

df["result"] = df.sum(axis=1)

2-2. サンプルコード

test_addition.py
import pandas as pd


def main():

    df = pd.DataFrame(
        data=[[1, 2, 3], [4, 5, 6], [7, 8, 9]],
        columns=["a", "b", "c"],
    )

    df["result"] = df["a"] + df["b"] + df["c"]
    print(df)


if __name__ == "__main__":
    main()

2-3. 実行結果

 想定通り、行ごとの合計値を計算することが出来ました。

   a  b  c  result
0  1  2  3       6
1  4  5  6      15
2  7  8  9      24

3. 関数を用いて行ごとの計算を行う

3-1. 書き方

 ここでは、行の合計値が10以上であるかを判定する関数を作成し、その結果を新たな列に
追加してみます。
まず、関数を適用する場合は、以下のように記載します。行ごとの計算を行うのでaxis=1が必要です。

DataFrame名.apply(関数名, axis=1)

3-2. サンプルコード

 今回は判定用の関数をcheck_sumとしました。機能としては、合計値が10以上であるかを判定し、
結果をTrue/Falseで返すようにしています。

test_apply.py
import pandas as pd


def check_sum(data):

    return (data["a"] + data["b"] + data["c"]) >= 10


def main():

    df = pd.DataFrame(
        data=[[1, 2, 3], [4, 5, 6], [7, 8, 9]],
        columns=["a", "b", "c"],
    )

    df["result"] = df.apply(check_sum, axis=1)
    print(df)


if __name__ == "__main__":
    main()

3-3. 実行結果

 想定通り、行ごとの合計値を判定することが出来ました。

   a  b  c  result
0  1  2  3   False
1  4  5  6    True
2  7  8  9    True

まとめ

 DataFrameで計算等を行う際は、参照するデータが列ごとなのか、行なのかを考えて
パラメータ(axis)を設定する必要があるそうです。pandasの使い方は、documentがあるので、
一度自分でも読んでみましょう。リンクは参考記事にまとめておきます。

参考記事

pandas.DataFrame.max — pandas 1.3.2 documentation
pandas.DataFrame.sum — pandas 1.3.2 documentation
pandas.DataFrame.apply — pandas 1.3.2 documentation

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?