import pandas as pd
# ジムの利用履歴データを読み込み
df = pd.read_csv("dataset/gym_log.csv", index_col="ログID")
# 先頭5行を確認
df.head()
| 利用者ID | 利用日 | 利用時間(分) |
---|
ログID | | | |
---|
1001 | U0001 | 2022/02/01 | 45 |
---|
1002 | U0002 | 2022/02/01 | 62 |
---|
1003 | U0001 | 2022/02/02 | 30 |
---|
1004 | U0003 | 2022/02/02 | 93 |
---|
1005 | U0002 | 2022/02/03 | 58 |
---|
# 利用日ごとに集約するので列「利用日」でグループ化
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/01 | 53.5 |
---|
2022/02/02 | 61.5 |
---|
2022/02/03 | 58.0 |
---|
2022/02/05 | 52.0 |
---|
2022/02/06 | 123.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
利用日 | 利用時間(分) |
---|
| count | max | min | mean | count_120_or_more |
---|
利用者ID | | | | | |
---|
U0001 | 10 | 134 | 30 | 72.400000 | 2 |
---|
U0002 | 9 | 182 | 20 | 90.222222 | 3 |
---|
U0003 | 5 | 130 | 20 | 78.200000 | 1 |
---|
U0004 | 3 | 67 | 45 | 52.666667 | 0 |
---|
U0005 | 4 | 68 | 32 | 48.250000 | 0 |
---|
コメント