DataFrameで特定カラムでユニークに集計する方法
DataFrame
で特定カラムでユニークに集計する方法についてのメモ。
利用するデータ
今回利用するデータは、一つのアカウントに対して、複数の本のタイトルが紐づいてるデータとする。
df[['account_id', 'title']]
本のタイトルがいくつ紐づいてるか集計すると以下のようになる。
df.groupby(['title']).agg({'title': 'count'}).sort_values(by='title', ascending=False)
このままだとあるアカウントが同じ本のタイトルに何回も紐づいてしまうため、アカウントごとに同じタイトルの本が複数紐づいてる場合は一つとカウントしたい。
agg関数をうまく使ってユニークにする
若干怪しいところあるけど、とりあえずはこれでできた。
unique_df = df.groupby(['account_id','title']).title.agg(lambda x: x.unique()).to_frame() unique_df.reset_index(drop=True) unique_df.groupby('title').agg({'title': 'count'}).sort_values(by='title', ascending=False)
agg
関数で集計する際に、値をユニークにしてるがミソ。
終わりに
SQL
ならこうできるのに!というのがまだあるため、もっとDataFrame
に慣れないとなー。