のデータフレームを生成:グループへのURLおよびタイムスタンプ、集計列の値のデータを私が欲しいはDASKのデータフレームを集約し、私はこのようになりますDASKのデータフレーム持って集合体
url referrer session_id ts customer
url1 ref1 xxx 2017-09-15 00:00:00 a.com
url2 ref2 yyy 2017-09-15 00:00:00 a.com
url2 ref3 yyy 2017-09-15 00:00:00 a.com
url1 ref1 xxx 2017-09-15 01:00:00 a.com
url2 ref2 yyy 2017-09-15 01:00:00 a.com
をし、希望のデータフレームを生成しますこの代わりに、次のようになります。次のように
スパークSQLでcustomer url ts page_views visitors referrers
a.com url1 2017-09-15 00:00:00 1 1 [ref1]
a.com url2 2017-09-15 00:00:00 2 2 [ref2, ref3]
、私はこれを行うことができます。
select
customer,
url,
ts,
count(*) as page_views,
count(distinct(session_id)) as visitors,
collect_list(referrer) as referrers
from df
group by customer, url, ts
Daskデータフレームでそれを行う方法はありますか?私がしようとしたが、次のように私は、別に集計列を計算することができます。
# group on timestamp (rounded) and url
grouped = df.groupby(['ts', 'url'])
# calculate page views (count rows in each group)
page_views = grouped.size()
# collect a list of referrer strings per group
referrers = grouped['referrer'].apply(list, meta=('referrers', 'f8'))
# count unique visitors (session ids)
visitors = grouped['session_id'].count()
しかし、私は、私は必要な組み合わせデータフレームを生成するための良い方法を見つけるように見えることはできません。
gb = df.groupby(['customer', 'url', 'ts'])
gb.apply(lambda d: pd.DataFrame({'views': len(d),
'visitiors': d.session_id.count(),
'referrers': [d.referer.tolist()]})).reset_index()
(と仮定すると、訪問者が上記のSQLごとのように一意である必要があります) あなたは、出力のmeta
を定義したいことがあります。
パンダでこれを行うには良い方法がありますか?その方法はdask.dataframeで動作しますか? – MRocklin