agg()
は、次のようにして使います。
df.agg(func=集約に使う関数, axis=計算の軸)
引数の説明
func
:集約に使う関数を指定します。axis
:処理の方向を指定します。0がインデックスで列ごとの集約になり、1が列名一覧で行ごとの集約になります。
また、agg()
メソッドは、Seriesでも使えます。その場合、引数axis
は指定不要です。
引数func
には、関数名や関数を指定するなど、いろいろな方法があります。詳しくは以降で確認しますが、本問ではまず、関数名を指定する方法について学びます。例として、"min"
、"max"
、"sum"
を扱います。
また、引数func
は第1引数なので、以降ではdf.agg(func=関数の指定)
ではなく、単にdf.agg(関数の指定)
と書いています。
DataFrame.agg()
では、axis
によってfunc
で指定される関数に渡される引数が変わります。
axis=0
の場合:func
の引数には、列が渡されます。axis=1
の場合:func
の引数には、行が渡されます。
axis=0
と指定するとインデックスに沿って計算するので、結果は列ごとになります。axis=1
と指定すると列名一覧に沿って計算するので、結果は行ごとになります。
下図は、デフォルト(axis=0
)とaxis=1
の計算する方向の違いを示しています。
図の矢印に沿って最大値である黄色い背景の値を取得しています。
具体例で確認しましょう。
タスクの一覧を表す以下のdf
を使います。
TaskName | WorkTime | LimitDate | |
---|---|---|---|
0 | 資料ABC確認 | 1.5 | 2022-04-11 |
1 | 資料XYZ確認 | 0.5 | 2022-04-01 |
2 | 報告書まとめ | 1.5 | 2022-04-05 |
3 | 本社ミーティング | 4.0 | 2022-04-04 |
4 | 出張報告書の提出 | 1.0 | 2022-04-05 |
最大値はmax()
で求められるので、以下のように関数名"max"
を指定しすると各列の最大値を取得できます。
なお、文字列の最大値とは、文字列を辞書順に並べて最後になる値を指します。
df.agg("max")
実行結果
TaskName 資料XYZ確認
WorkTime 4.0
LimitDate 2022/04/11
dtype: object
また、列WorkTime
の最大値は次のようになります。
df.WorkTime.agg("max")
実行結果
4.0
演習
タスク一覧を読み込みます。In [1]:
import pandas as pd df = pd.read_csv("dataset/task.csv", encoding="utf-8") df
Out[1]:
TaskName | WorkTime | LimitDate | |
---|---|---|---|
0 | 資料ABC確認 | 1.5 | 2022/04/11 |
1 | 資料XYZ確認 | 0.5 | 2022/04/01 |
2 | 報告書まとめ | 1.5 | 2022/04/05 |
3 | 本社ミーティング | 4.0 | 2022/04/04 |
4 | 出張報告書の提出 | 1.0 | 2022/04/05 |
列ごとに最小値を計算します。最小値の計算では、第1引数に”min”を指定します。 また、列ごとに計算する場合は、インデックスに沿って計算するので引数axis
に0を指定します。axis=0
はデフォルト値なので、下記では省略しています。In [2]:
df.agg("min")
Out[2]:
TaskName 出張報告書の提出 WorkTime 0.5 LimitDate 2022/04/01 dtype: object
列ごとに最大値を計算します。最大値の計算には”max”を指定します。In [3]:
df.agg("max")
Out[3]:
TaskName 資料XYZ確認 WorkTime 4.0 LimitDate 2022/04/11 dtype: object
axis=1
をつけると、行ごとに集約します。df
を転置したデータで確認してみましょう。次のようにT
を使うとデータが転置し、行と列が入れ替わります。In [4]:
df.T
Out[4]:
0 | 1 | 2 | 3 | 4 | |
---|---|---|---|---|---|
TaskName | 資料ABC確認 | 資料XYZ確認 | 報告書まとめ | 本社ミーティング | 出張報告書の提出 |
WorkTime | 1.5 | 0.5 | 1.5 | 4.0 | 1.0 |
LimitDate | 2022/04/11 | 2022/04/01 | 2022/04/05 | 2022/04/04 | 2022/04/05 |
転置したdf
にaxis=1
をつけて行ごとに集約すると、元のdf
を列ごとに集約した結果と同じになります(解説で図で説明しています)。In [5]:
df.T.agg("max", axis=1)
Out[5]:
TaskName 資料XYZ確認 WorkTime 4.0 LimitDate 2022/04/11 dtype: object
agg()
は、Seriesも同様に使えます。下記では列WorkTime
の最大値を計算します。In [6]:
df.WorkTime.agg("max")
Out[6]:
4.0
合計を計算するには”sum”を指定します。下記では列WorkTime
の合計を計算します。In [7]:
df.WorkTime.agg("sum")
Out[7]:
8.5
補足
本問では、agg()
に関数名を指定する方法で集約を行いました。agg()
では、関数名ではなく関数そのものを指定することもできます。実際に確認してみましょう。
"min"
を例にします。対応する関数はpd.DataFrame.min
です。
下記を実行するとdf.agg("min")
と同じ結果になります。
df.agg(pd.DataFrame.min)
コメント