首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在daru中多次聚合同一列

如何在daru中多次聚合同一列
EN

Stack Overflow用户
提问于 2019-10-11 21:49:33
回答 1查看 85关注 0票数 1

我希望获得分组的聚合数据,但在使用多个函数聚合同一列时遇到了问题。

基本上,我想知道是否有重命名聚合列的方法,这样它就不会重写。

以下是我的代码

代码语言:javascript
复制
    df = Daru::DataFrame.from_activerecord(active_record,
                                           *%i[jobs.id jobs.demand_created_at jobs.quality_rating jobs.service_rating jobs.value_rating SC.name D.czso_region_id])
    df.vectors = Daru::Index.new(%i[job_id demand_created_at quality_rating service_rating value_rating specific_category_name region_id])

    # computed columns
    df[:avg_rating] = ((df[:quality_rating] + df[:service_rating] + df[:value_rating]) / 3.0)
    df[:broad_region_id] = df[:region_id].recode { |i| i[0...-1]}

    df_grouped = df.group_by([:specific_category_name, :broad_region_id, :job_id])
    df_grouped.aggregate(avg_rating: :mean, job_id: :count).aggregate(avg_rating: :mean, job_id: :count)

我在这里遇到了问题:

代码语言:javascript
复制
df_grouped.aggregate(avg_rating: :mean, job_id: :count).aggregate(avg_rating: :mean, job_id: :count)

基本上,我想写一些类似这样的东西(例如):

代码语言:javascript
复制
df_grouped.aggregate(avg_rating: :mean, avg_rating: :std)

但是,这只会生成一个名为avg_rating和error的列

(irb):124: warning: key :avg_rating is duplicated and overwritten on line 124

有没有办法重命名聚合列?我唯一的想法是复制列,但这似乎是一个非常老套的解决方案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-25 22:32:34

好吧,我终于找到了答案here

分组数据的聚集可以像这样完成:

代码语言:javascript
复制
df.group_by(:a).aggregate(
 avg_d:    ->(df) { df[:d].mean },
 sum_c:    ->(df) { df[:c].sum },
 avg_of_c: ->(df) { df[:c].mean },
 size_b_with_lambda: ->(grouped){ grouped[:b].size}, 
 uniq_b_with_proc: proc {|grouped| grouped[:b].uniq.size }
)

它解决了我所有的问题

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58342665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档