如何解决与朱莉娅数据框上的总和分组
我正在尝试在具有Int和String值的Julia数据帧上进行groupby +总和
例如df:
│ Row │ A │ B │ C │ D │
│ │ String │ String │ Int64 │ String │
├─────┼────────┼────────┼───────┼────────┤
│ 1 │ x1 │ a │ 12 │ green │
│ 2 │ x2 │ a │ 7 │ blue │
│ 3 │ x1 │ b │ 5 │ red │
│ 4 │ x2 │ a │ 4 │ blue │
│ 5 │ x1 │ b │ 9 │ yellow │
要在Python中执行此操作,命令可以是:
df_group = df.groupby(['A','B']).sum().reset_index()
我将获得带有初始列标签的以下输出结果:
A B C
0 x1 a 12
1 x1 b 14
2 x2 a 11
我想在朱莉娅做同样的事情。我以这种方式尝试了,但未成功:
df_group = aggregate(df,["A","B"],sum)
MethodError:没有与+(:: String,:: String)
匹配的方法您对使用Julia做到这一点的方法有任何想法吗?
解决方法
尝试(实际上,不是非字符串列,可能您希望使用数字列):
numcols = names(df,findall(x -> eltype(x) <: Number,eachcol(df)))
combine(groupby(df,["A","B"]),numcols .=> sum .=> numcols)
,如果您想允许missing
值(在求和时跳过它们),则:
numcols = names(df,findall(x -> eltype(x) <: Union{Missing,Number},numcols .=> sum∘skipmissing .=> numcols)
,
Julia DataFrames支持split-apply-combine逻辑,类似于熊猫,因此聚合看起来像
using DataFrames
df = DataFrame(:A => ["x1","x2","x1","x1"],:B => ["a","a","b","b"],:C => [12,7,5,4,9],:D => ["green","blue","red","yellow"])
gdf = groupby(df,[:A,:B])
combine(gdf,:C => sum)
结果
julia> combine(gdf,:C => sum)
3×3 DataFrame
│ Row │ A │ B │ C_sum │
│ │ String │ String │ Int64 │
├─────┼────────┼────────┼───────┤
│ 1 │ x1 │ a │ 12 │
│ 2 │ x2 │ a │ 11 │
│ 3 │ x1 │ b │ 14 │
您可以在Pipe.jl或Underscores.jl的帮助下跳过创建gdf
using Underscores
@_ groupby(df,:B]) |> combine(__,:C => sum)
您可以使用以下语法为新列命名
julia> @_ groupby(df,:C => sum => :C)
3×3 DataFrame
│ Row │ A │ B │ C │
│ │ String │ String │ Int64 │
├─────┼────────┼────────┼───────┤
│ 1 │ x1 │ a │ 12 │
│ 2 │ x2 │ a │ 11 │
│ 3 │ x1 │ b │ 14 │
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。