agg()を用いた演習

import pandas as pd

# ジムの利用履歴データを読み込み
df = pd.read_csv("dataset/gym_log.csv", index_col="ログID")
# 先頭5行を確認
df.head()
利用者ID利用日利用時間(分)
ログID
1001U00012022/02/0145
1002U00022022/02/0162
1003U00012022/02/0230
1004U00032022/02/0293
1005U00022022/02/0358
# 利用日ごとに集約するので列「利用日」でグループ化
grouped_date = df.groupby("利用日")

# 平均値を計算
mean_by_date_df = grouped_date.mean()
# 先頭5行を確認
mean_by_date_df.head()

ここで、mean_by_date_df = grouped_date[“利用時間(分)”].mean()とするとSeriesになる。

利用時間(分)
利用日
2022/02/0153.5
2022/02/0261.5
2022/02/0358.0
2022/02/0552.0
2022/02/06123.0
# 利用者IDごとに集約するので、列「利用者ID」でグループ化
grouped_user = df.groupby("利用者ID")


def count_120_or_more(sr):
    # 120以上のデータの個数を計算
    # 引数srには、各グループの列が渡される
    return (sr >= 120).sum() カッコを忘れない。忘れがち


# 利用者ごとに、「利用日」のデータの個数、
# 「利用時間」の最大値・最小値・平均値・120以上のデータの個数を計算する
summary_by_user_df = grouped_user.agg(
    {"利用日": "count", "利用時間(分)": ["max", "min", "mean", count_120_or_more]} 自作した関数は""でくくらない。
)
summary_by_user_df

利用日
利用時間(分)
countmaxminmeancount_120_or_more
利用者ID
U0001101343072.4000002
U000291822090.2222223
U000351302078.2000001
U00043674552.6666670
U00054683248.2500000

コメント

タイトルとURLをコピーしました