gpt4 book ai didi

group-by - 聚合 Dask 数据帧并生成聚合数据帧

转载 作者:行者123 更新时间:2023-12-02 21:40:40 25 4
gpt4 key购买 nike

我有一个如下所示的 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

我想根据 url 和时间戳对数据进行分组,聚合列值并生成一个如下所示的数据框:

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]

在 Spark SQL 中,我可以按如下方式执行此操作:

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 应该是唯一的)您可能希望定义输出的

关于group-by - 聚合 Dask 数据帧并生成聚合数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46375382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com