python pandas 集計処理(group by関数)
pandas 集計処理(groupby関数)について
■集約処理について 同じ集約単位に対する複数の処理を行う場合には、groupby関数関数を利用することで 同時に集約処理が可能だが、集約処理が1つの場合は、agg関数を使わない方が簡潔に書ける。
import numpy as np import pandas as pd
index | ID | 日 | 時 | セッション | 閲覧時間 |
---|---|---|---|---|---|
0 | 328667572 | 31 | 16 | 38 | 5 |
1 | 70373573 | 24 | 23 | 37 | 7 |
2 | 1839656582 | 12 | 20 | 28 | 6 |
4 | 1471882803 | 10 | 22 | 22 | 7 |
5 | 302325623 | 20 | 8 | 22 | 2 |
↓IDをグルーピングして、閲覧時間を要素ごとにまとめる。 reset_index()でDataFrameのままで出力。
sample2=sample.groupby('ID')['閲覧時間'].apply(list).reset_index()
ID | 閲覧時間 | |
---|---|---|
0 | 9460 | [4, 6] |
1 | 72625 | [6, 6] |
2 | 85657 | [6, 5, 4] |
3 | 86703 | [0, 0] |
4 | 106015 | [5, 6, 0] |
5 | 111931 | [2, 2, 7] |
↓IDをグルーピングして、閲覧時間を要素ごとにまとめる。 reset_index()でDataFrameのままで出力。
sample2=sample.groupby('ID')['閲覧時間'].apply(list).reset_index()
ID | 閲覧時間 | |
---|---|---|
0 | 9460 | [4, 6] |
1 | 72625 | [6, 6] |
2 | 85657 | [6, 5, 4] |
3 | 86703 | [0, 0] |
4 | 106015 | [5, 6, 0] |
5 | 111931 | [2, 2, 7] |
↓閲覧時間を要素ごとにまとめた要素をラムダを使ってsort し、ooカラム名で追加。
sample2['oo'] = sample2['閲覧時間'].apply(lambda x:sorted(x))
ID | 閲覧時間 | oo | |
---|---|---|---|
0 | 9460 | [4, 6] | [4, 6] |
1 | 72625 | [6, 6] | [6, 6] |
2 | 85657 | [6, 5, 4] | [4, 5, 6] |
3 | 86703 | [0, 0] | [0, 0] |
4 | 106015 | [5, 6, 0] | [0, 5, 6] |
5 | 111931 | [2, 2, 7] | [2, 2, 7] |
↓aggを使ってIDをグループ化。閲覧時間を合計、IDをカウント
pp =sample.groupby("ID").agg({"閲覧時間":"sum","ID":"count"})
閲覧時間 | ID | |
---|---|---|
ID | ||
9460 | 46 | 2 |
72625 | 66 | 2 |
85657 | 654 | 3 |
86703 | 0 | 2 |
106015 | 560 | 3 |
↓セッションの合計
sample.groupby(["ID"])["セッション"].sum().reset_index()
ID | セッション | |
---|---|---|
0 | 9460 | 2 |
1 | 72625 | 2 |
2 | 85657 | 5 |
3 | 86703 | 2 |
4 | 106015 | 3 |
↓グループ化と集計を同時に実行する
iine=report.groupby("月")["いいね"].aggregate(["mean", "median",max,sum,"std"]).head() retwiit=report.groupby("月")["リツイート"].aggregate(["mean", "median",max,sum,"std"]).head() eng=report.groupby("月")["エンゲージメント"].aggregate(["mean", "median",max,sum,"std"]).head() cor=report.corr("pearson") display('iine.head()', 'retwiit.head()','eng.head()',"cor")