ぺーぱーの日々

上機嫌でいること、夢中でいることを目標に、今日も色んなことに手を出します。

MENU

初学者を卒業するべく、aggregate関数を使いこなせるようになりたい!

はじめに

aggregate関数が、脱・初学者のカギを握っているのではないかと思って、とりあえず実装してみた。

やりたいこと

aggregate関数を使いこなして、スマートなコーディングをしたい

基本

aggregate関数とは

複数の処理を一度に処理できる関数

イメージ

あるデータの、

平均も知りたい、

中央値も知りたい、

標準偏差も知りたい、

ってときに、

aggregate関数を使えば、

一気に3つの処理ができる!のではないかと期待。

実装

いざ、実装!

まずは、スモールスタート。

こんな感じのDataframeを用意。

コード
df = pd.DataFrame({'X': [0, 1, 2], 'Y': [3, 4, 5]})
df

次に、各列の合計、平均、最大値、最小値を知りたい。

それぞれ変数を作って計算
# 合計
X_sum = sum(df['X'])
Y_sum = sum(df['Y'])

# 平均
X_mean = sum(df['X']) / len(df['X'])
Y_mean = sum(df['Y']) / len(df['Y'])

# 最大値
X_max = df['X'].max()
Y_max = df['Y'].max()

# 最小値
X_min = df['X'].min()
Y_min = df['Y'].min()

print(X_sum)
print(Y_sum)

print(X_mean)
print(Y_mean)

print(X_max)
print(Y_max)

print(X_min)
print(Y_min)

いやいや、だるすぎでしょ。。。

aggregate関数を使って
print(df.aggregate(['sum', 'mean', 'max', 'min']))

まじ、一瞬!さっき8行もかかっていたのに・・・(print実行除いて)

 

これは、使える!いや、使いこなしたい!!

応用

ということで、たびたび登場の実現損益履歴を使って、aggregateの応用!

実現損益履歴

このデータの実現損益列の、合計、平均、最大値、最小値、標準偏差、分散を算出する!

コード
# データの読み込み
df = pd.read_csv('realized_pl.csv', encoding='shift-JIS')

# 目的の列のデータ型を変換
df['実現損益[]'].astype(str)
df['実現損益[]'] = df['実現損益[]'].str.replace('(' , '-').str.replace(')' , '').astype(int)

# 目的の列を変数に代入
pl = df['実現損益[]']

# Agg関数を使って、処理を行う
agg_pl = pl.agg(['sum', 'mean', 'max', 'min', 'std', 'var'])

# 得られた値をInt型に変換して、Dataframeを作成
int_agg_pl = agg_pl.astype(int)
pd.DataFrame(int_agg_pl)

# Dataframeを表示
print(int_agg_pl)
出力結果

おわりに

応用編では、処理ができるようにデータ型の変換とかをしたせいで、まあまあなコード量になって、あんまりスマートな実装はお見せできなかったが、実際の算術処理はaggregate関数でスマートにできたと思うので、良しとする!

これまで、処理ごとに変数を定義して、いちいち組み込み関数で処理を実行していたが、aggregate関数があれば、一発で完結して、少しだけ脱・初学者した気分!

今後も自信をもって、aggregateを使って美しいコーディングを目指していきたい。

参考サイト

apandas v1のgroupbyで複数の統計量を取得したい場合 - Qiita