Julia DataFrames.jl、Groupby和多列求和

Julia DataFrames.jl、Groupby和多列求和,dataframe,julia,Dataframe,Julia,我想知道如何使用“by”函数对多个列进行分组和求和。如果我想按一列进行分组,我可以这样做 someData = DataFrame(:Countries => ["Afganistan","Albainia","Albainia","Andorra","Angola","Angola"],:population => rand(100:1000,6), :GDP =

我想知道如何使用“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
函数,因为它已被弃用。改为使用此选项(您看不到警告,因为您可能是在将
--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     │