Aggregate 如何在daru中多次聚合同一列
我希望获得分组聚合数据,但在使用多个函数聚合同一列时遇到问题 基本上,我想知道是否有办法重命名聚合列,这样它就不会重写 这是我的密码Aggregate 如何在daru中多次聚合同一列,aggregate,daru,Aggregate,Daru,我希望获得分组聚合数据,但在使用多个函数聚合同一列时遇到问题 基本上,我想知道是否有办法重命名聚合列,这样它就不会重写 这是我的密码 df = Daru::DataFrame.from_activerecord(active_record, *%i[jobs.id jobs.demand_created_at jobs.quality_rating jobs.service_rating jobs.va
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)
我在这里遇到了问题:
df_grouped.aggregate(avg_rating: :mean, job_id: :count).aggregate(avg_rating: :mean, job_id: :count)
基本上,我想写这样的东西(例如):
但是,这只会生成一个名为avg_rating
和error的列
(irb):124:警告:键:第124行的平均额定值被复制和覆盖
有没有办法重命名聚合列?
我唯一的想法是复制列,但这似乎是一个非常棘手的解决方案。我终于找到了答案 分组数据的聚合可以这样做:
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 }
)
这解决了我所有的问题
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 }
)