python_analytics

主にpythonやライブラリーを使ったデータ解析、機械学習、統計学などについて書いていきます

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