You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Julia中如何使用groupby替代已弃用的by+do表达式完成分组计算

Julia DataFrames 已弃用by函数的替换方案

问题背景

我们的目标是生成模拟数据,首先定义如下参数:

## 模拟数据
df_3 = DataFrame(y = [0,1], size = [250,250], x1 =[2.,0.], x2 =[-1.,-2.])

原实现用的是已弃用的by函数搭配do块的写法,代码如下(摘自2019年出版的《Data Science with Julia》一书):

df_knn = by(df_3, :y) do df
  DataFrame(x_1 = rand(Normal(df[1,:x1],1), df[1,:size]),
  x_2 = rand(Normal(df[1,:x2],1), df[1,:size]))
end

现在需要用groupby替换上述代码中的by函数,实现相同的分组生成数据的功能。

实现代码

DataFrames.jl 中现在可以用 groupby + combine 的组合完全替代原by函数的功能,替换后的代码和原逻辑完全一致:

using DataFrames, Distributions

# 先按y列分组,再对每个分组执行自定义生成逻辑
df_knn = combine(groupby(df_3, :y)) do df
    DataFrame(
        x_1 = rand(Normal(df[1,:x1], 1), df[1,:size]),
        x_2 = rand(Normal(df[1,:x2], 1), df[1,:size])
    )
end

逻辑说明

  • 首先调用groupby(df_3, :y)按y列对原数据框分组,得到分组后的GroupedDataFrame对象
  • 再调用combine函数对每个分组执行do块内的逻辑,每个分组都会读取该组的x1、x2、size参数生成对应数量的正态分布随机数,最终合并为完整的df_knn数据框,输出结果和原by写法完全一致。

内容的提问来源于stack exchange,提问作者BuddhiLW

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 09:15:04