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

Julia中如何在combine操作内使用nrow创建新列

在DataFrames的combine操作内计算metric_per_frequency指标

你已经完成了topics列拆分、分组统计,但需要在combine内部直接生成metric_per_frequency(即sum_metric除以frequency_topics),不需要额外后续步骤,也不想用速度较慢的@by宏。

修改后的可行代码

方法1:基于多列映射的方式

topics = ["Money,Income,Lifestyle","Knowledge,Windows,Weather","Vaccation,Holiday,Money,Weather"]
metric = [2347820, 1275610, 1255383]

table = DataFrame(topics=topics, metric=metric)

agg_table = combine(
    groupby(
        # 修复拆分逻辑:避免空字符串,直接返回拆分后的数组
        flatten(transform(table, :topics => ByRow(x -> ismissing(x) ? [] : split(x, ",")) => :topics), :topics),
        :topics
    ),
    nrow => :frequency_topics,
    :metric => sum => :sum_metric,
    # 利用已计算的两列,通过匿名函数计算比值
    [:sum_metric, :frequency_topics] => (s, f) -> s ./ f => :metric_per_frequency
)

方法2:使用do块一次性计算所有指标(效率更高)

agg_table = combine(groupby(flatten(transform(table, :topics => ByRow(x -> ismissing(x) ? [] : split(x, ",")) => :topics), :topics), :topics)) do g
    freq = nrow(g)
    sum_m = sum(g.metric)
    DataFrame(
        frequency_topics = freq,
        sum_metric = sum_m,
        metric_per_frequency = sum_m / freq
    )
end

输出结果

Row │ topics     sum_metric  frequency_topics  metric_per_frequency
     │ String     Int64       Int64             Float64             
─────┼───────────────────────────────────────────────────────────────
   1 │ Money         3603203                  2           1.8016015e6
   2 │ Income        2347820                  1           2.34782e6
   3 │ Lifestyle     2347820                  1           2.34782e6
   4 │ Knowledge     1275610                  1           1.27561e6
   5 │ Windows       1275610                  1           1.27561e6
   6 │ Weather       2530993                  2           1.2654965e6
   7 │ Vaccation     1255383                  1           1.255383e6
   8 │ Holiday       1255383                  1           1.255383e6

关键说明

  • 方法1中,combine支持以多列数组作为输入([:sum_metric, :frequency_topics]),通过匿名函数接收对应列的计算结果,完成比值计算。
  • 方法2的do块模式直接操作每个分组的子DataFrame,只需遍历一次分组即可计算所有指标,在数据量较大时效率更优。
  • 原拆分逻辑中修复了空字符串的问题:当x为空时返回空数组而非空字符串,避免生成无效的空topic行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 22:32:28