dogrunjp
10/10/2014 - 9:00 AM

SQLでSELECT DISTINCTしてユニークな組み合わせをカウントするような問い合わせを、pandasのデータフレームに書き変えてみました。以下「お昼のセットメニューの組み合わせに投票」という体の集計スクリプトです。

SQLでSELECT DISTINCTしてユニークな組み合わせをカウントするような問い合わせを、pandasのデータフレームに書き変えてみました。以下「お昼のセットメニューの組み合わせに投票」という体の集計スクリプトです。

#ユーザーに"main_dish"と"soup"を組み合わせて投票してもらいます。
#ただし、ユーザーは同じメニューの組み合わせに何度でも投票できるため
#一つの組み合わせの有効票は1ユーザにつき1としてカウントしたい、とします。
import pandas as pd
import numpy as nm
d = {{"main_dish": pd.Series(["ステーキ","ハンバーグ",,,])\
      ,"soup":pd.Series(["みそ汁","クラムチャウダー",,,]) \
      ."user": pd.Series(["@user1","@user2",,,])
      
df = pd.DataFrame(d)
#階層的インデックスを持つSeriesが得られる。"user"の値はユニークなユーザーのリストとなる。
df_u = df.groupby(["main_dish","soup"]).user.unique() 
#SeriesをDataFrameに変換
df_u = pd.DataFrame(df_u)
#unique()で返える"user"はユーザ名のnd.arrayなため、この項目をユーザ数に置き換える
df_u["user"] = df_u["user"].map(lambda x: len(x))

df_u
#ハンバーグ コーンスープ 25
#のようなデータフレームが得られます