gpt4 book ai didi

dataframe - Julia DataFrames.jl,Groupby 和对多列求和

转载 作者:行者123 更新时间:2023-12-04 16:38:54 26 4
gpt4 key购买 nike

我想知道如何使用“by”函数对多列进行分组和求和。如果我想按一列分组,我可以这样做

someData = DataFrame(:Countries => ["Afganistan","Albainia","Albainia","Andorra","Angola","Angola"],:population => rand(100:1000,6), :GDP => rand(1:100,6))

by(someData, :Countries, df ->DataFrame(pop_sum = sum(df[:population])))

但是,我想获得人口和 GDP 的总和。我尝试了类似下面的内容,这当然是不正确的。有什么想法吗?

by(someData, :Countries, df ->DataFrame(pop_sum, GDP_sum = sum(df[[:population,:GDP]])))

最佳答案

不要使用 by 函数,因为它已被弃用。而是使用它(您看不到警告,因为您可能在启动 Julia 时将 --depwarn 设置为 no,这是默认设置):

julia> someData = DataFrame(:Countries => ["Afganistan","Albainia","Albainia","Andorra","Angola","Angola"],
:population => rand(100:1000,6),
:GDP => rand(1:100,6))
6×3 DataFrame
│ Row │ Countries │ population │ GDP │
│ │ String │ Int64 │ Int64 │
├─────┼────────────┼────────────┼───────┤
│ 1 │ Afganistan │ 543 │ 29 │
│ 2 │ Albainia │ 853 │ 71 │
│ 3 │ Albainia │ 438 │ 81 │
│ 4 │ Andorra │ 860 │ 88 │
│ 5 │ Angola │ 940 │ 64 │
│ 6 │ Angola │ 688 │ 40 │

julia> combine(groupby(someData, :Countries), [:population, :GDP] .=> sum)
4×3 DataFrame
│ Row │ Countries │ population_sum │ GDP_sum │
│ │ String │ Int64 │ Int64 │
├─────┼────────────┼────────────────┼─────────┤
│ 1 │ Afganistan │ 543 │ 29 │
│ 2 │ Albainia │ 1291 │ 152 │
│ 3 │ Andorra │ 860 │ 88 │
│ 4 │ Angola │ 1628 │ 104 │

另一种写法是:

julia> combine(groupby(someData, :Countries)) do sdf
return (population_sum = sum(sdf.population), GDP_sum=sum(sdf.GDP))
end
4×3 DataFrame
│ Row │ Countries │ population_sum │ GDP_sum │
│ │ String │ Int64 │ Int64 │
├─────┼────────────┼────────────────┼─────────┤
│ 1 │ Afganistan │ 543 │ 29 │
│ 2 │ Albainia │ 1291 │ 152 │
│ 3 │ Andorra │ 860 │ 88 │
│ 4 │ Angola │ 1628 │ 104 │

但在这种情况下它更冗长(如果您想在返回值之前对数据进行更复杂的预处理,这将很有用)。

关于dataframe - Julia DataFrames.jl,Groupby 和对多列求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64666661/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com