我有一堆想要组合的分组数据帧gdf
。我想将 GDF 与 var1 的平均值(Float)和 var2 的第一个元素(String)结合起来。
我试过了
combine(gdf, :var1 .=> mean, :var2 .=> first(:var2))
但是出现错误错误:MethodError:没有与 iterate(::Symbol) 匹配的方法
我还尝试了 first(:var2, 1)
。
感谢您的帮助。
最佳答案
这是使用 DataFrames.jl 执行此操作的方法:
julia> using DataFrames
julia> using Statistics
julia> df = DataFrame(id=[1,2,1,2,1,2], var1=1.5:1:6.5, var2=string.(1:6))
6×3 DataFrame
Row │ id var1 var2
│ Int64 Float64 String
─────┼────────────────────────
1 │ 1 1.5 1
2 │ 2 2.5 2
3 │ 1 3.5 3
4 │ 2 4.5 4
5 │ 1 5.5 5
6 │ 2 6.5 6
julia> gdf = groupby(df, :id)
GroupedDataFrame with 2 groups based on key: id
First Group (3 rows): id = 1
Row │ id var1 var2
│ Int64 Float64 String
─────┼────────────────────────
1 │ 1 1.5 1
2 │ 1 3.5 3
3 │ 1 5.5 5
⋮
Last Group (3 rows): id = 2
Row │ id var1 var2
│ Int64 Float64 String
─────┼────────────────────────
1 │ 2 2.5 2
2 │ 2 4.5 4
3 │ 2 6.5 6
julia> combine(gdf, :var1 => mean, :var2 => first)
2×3 DataFrame
Row │ id var1_mean var2_first
│ Int64 Float64 String
─────┼──────────────────────────────
1 │ 1 3.5 1
2 │ 2 4.5 2
(=>
之前不需要 .
,也不需要显式地将参数传递给 first
)
如果您更喜欢使用赋值样式(而不是带有 =>
对的函数式样式),请使用 DataFramesMeta.jl:
julia> using DataFramesMeta
julia> @combine(gdf, :var1_mean=mean(:var1), :var2_first=first(:var2))
2×3 DataFrame
Row │ id var1_mean var2_first
│ Int64 Float64 String
─────┼──────────────────────────────
1 │ 1 3.5 1
2 │ 2 4.5 2
关于dataframe - 将 Julia 中的分组 DF 与 float 和字符串结合起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72946707/