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

如何在Julia DataFrame中按多国家组合拆分分配分数?

解决DataFrame中组合国家的分数拆分求和问题

核心思路

将包含/的组合国家拆分为单个国家,把原分数按拆分后的国家数量平均分配,再按单个国家分组求和。

完整实现代码

首先构造测试数据(和你的数据一致):

using DataFrames

db_test = DataFrame(
    Name = ["Oliver", "Patrick", "Jules", "Steven", "Karl", "Alexander", "Julian"],
    Score = [5.0, 3.0, 2.0, 3.5, 4.0, 3.0, 1.0],
    Country = ["France", "Spain", "France", "USA", "France", "France/USA", "Spain/USA"]
)

分步骤处理:

  1. 拆分国家并计算分配后的分数
    添加拆分后的国家列表列,同时将原分数按国家数量均分:

    transform!(db_test, 
        :Country => (x -> split.(x, "/")) => :SplitCountries,
        [:SplitCountries, :Score] => ((cs, s) -> s ./ length.(cs)) => :SplitScore
    )
    
  2. 展开拆分后的国家为单独行
    将每个国家数组展开成独立行,每行对应一个单个国家:

    explode!(db_test, :SplitCountries)
    
  3. 按单个国家分组求和
    对拆分后的国家分组,求和分配后的分数:

    result = combine(groupby(db_test, :SplitCountries), :SplitScore => sum => :Score_sum)
    rename!(result, :SplitCountries => :Country)
    

简化链式写法

如果你喜欢更紧凑的代码,可以用链式操作:

result = db_test |>
    x -> transform(x, 
        :Country => (c -> split.(c, "/")) => :SplitCountries,
        [:SplitCountries, :Score] => ((cs, s) -> s ./ length.(cs)) => :SplitScore
    ) |>
    x -> explode(x, :SplitCountries) |>
    x -> combine(groupby(x, :SplitCountries), :SplitScore => sum => :Score_sum) |>
    x -> rename(x, :SplitCountries => :Country)

最终结果

运行后得到的result就是你需要的输出:

Row │ Country  Score_sum 
     │ String   Float64   
─────┼────────────────────
   1 │ France        12.5
   2 │ Spain          3.5
   3 │ USA            5.5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 01:12:50