Julia DataFrames.jl、Groupby和多列求和
我想知道如何使用“by”函数对多个列进行分组和求和。如果我想按一列进行分组,我可以这样做Julia DataFrames.jl、Groupby和多列求和,dataframe,julia,Dataframe,Julia,我想知道如何使用“by”函数对多个列进行分组和求和。如果我想按一列进行分组,我可以这样做 someData = DataFrame(:Countries => ["Afganistan","Albainia","Albainia","Andorra","Angola","Angola"],:population => rand(100:1000,6), :GDP =
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
函数,因为它已被弃用。改为使用此选项(您看不到警告,因为您可能是在将--depwarn
设置为no
时启动Julia,这是默认设置):
另一种编写方法是:
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 │
但在这种情况下,它更为冗长(如果您想在返回值之前对数据进行更复杂的预处理,这将非常有用)
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 │