Window関数の中には、行を集約せず、集計結果を横に残す計算をすることがあります。
sum(col) over(partition by group_col)
これをPandasで行うにはtransform
を使います。
(あまりよくない方法として、集計をしたものをjoinする方法もあります)
transformを使う方法
import pandas as pd #カテゴリと集約用のカラムを持つデータをつくる d = {"c": [random.choice(['a','b','c']) for i in range(10)], "n1":1, "n2":0.1 } df = pd.DataFrame(d) #n1をグループごとに合計した結果を行を集約せずつける df['total_n_by_group'] = df.groupby('c').n1.transform(sum) #複数データ(n1,n2)に対して、一度に処理をかける pd.concat([ df, df.groupby('c').transform(sum) ],axis=1)
よくない例としてはaggをもとにself joinするパターンがあります
df.groupby('c',as_index=False).n1.sum().merge(df,on='c')
よく使う集計としては以下があります
- sum
- ncount
- min
- max
- mean
などなど