我知道可以从 Julia DataFrames 中的数据中删除相同的行,但是在删除相同的行时是否可以对相同行的一列元素进行求和?
我的意思是,对于下面的数据,我想对相同行的周期
求和,而不对amp
和mean
求和。
julia> Data1
8×3 DataFrames.DataFrame
│ Row │ amp │ mean │ cycles │
├─────┼───────┼───────┼────────┤
│ 1 │ 50.0 │ 250.0 │ 1.0 │
│ 2 │ 150.0 │ 250.0 │ 1.0 │
│ 3 │ 350.0 │ 150.0 │ 1.0 │
│ 4 │ 150.0 │ -50.0 │ 1.0 │
│ 5 │ 50.0 │ 250.0 │ 1.0 │
│ 6 │ 150.0 │ 250.0 │ 1.0 │
│ 7 │ 450.0 │ 150.0 │ 0.5 │
│ 8 │ 450.0 │ 150.0 │ 0.5 │
那么数据将如下所示:
julia> Data1
5×3 DataFrames.DataFrame
│ Row │ amp │ mean │ cycles │
├─────┼───────┼───────┼────────┤
│ 1 │ 50.0 │ 250.0 │ 2.0 │
│ 2 │ 150.0 │ 250.0 │ 2.0 │
│ 3 │ 350.0 │ 150.0 │ 1.0 │
│ 4 │ 150.0 │ -50.0 │ 1.0 │
│ 5 │ 450.0 │ 150.0 │ 1.0 │
感谢您提前提供的任何帮助。
最佳答案
您至少有以下选择
julia> aggregate(df, [:amp, :mean], sum)
5×3 DataFrames.DataFrame
│ Row │ amp │ mean │ cycles_sum │
├─────┼───────┼───────┼────────────┤
│ 1 │ 50.0 │ 250.0 │ 2.0 │
│ 2 │ 150.0 │ 250.0 │ 2.0 │
│ 3 │ 350.0 │ 150.0 │ 1.0 │
│ 4 │ 150.0 │ -50.0 │ 1.0 │
│ 5 │ 450.0 │ 150.0 │ 1.0 │
julia> by(df, [:amp, :mean], df->DataFrame(cycles=sum(df[:cycles])))
5×3 DataFrames.DataFrame
│ Row │ amp │ mean │ cycles │
├─────┼───────┼───────┼────────┤
│ 1 │ 50.0 │ 250.0 │ 2.0 │
│ 2 │ 150.0 │ 250.0 │ 2.0 │
│ 3 │ 350.0 │ 150.0 │ 1.0 │
│ 4 │ 150.0 │ -50.0 │ 1.0 │
│ 5 │ 450.0 │ 150.0 │ 1.0 │
两者都可以在 DataFrames.jl documentation 中找到。
我发现后者在快速而肮脏的基准测试中更快。
请注意,正如评论中所指出的,当 使用 DataFramesMeta
(github repo)。
更新:
正如评论中所提到的,上面的解决方案总结了行的循环值,这些值仅在它们的 amp
和 mean
值方面相同,即它们可以原则上有不同的cycle
值。如果还想区分具有不同 cycle
值的行,很容易采用上面的第二种方法:
@by(df, [:amp, :mean, :cycles], Cycles_sum=sum(:cycles))
顺便说一下,数据集的复制:
julia> s = "amp,mean,cycles
50.0,250.0,1.0
150.0,250.0,1.0
350.0,150.0,1.0
150.0,-50.0,1.0
50.0,250.0,1.0
150.0,250.0,1.0
450.0,150.0,0.5
450.0,150.0,0.5"
julia> using DataFrames, CSV
julia> df = CSV.read(IOBuffer(s))
8×3 DataFrames.DataFrame
│ Row │ amp │ mean │ cycles │
├─────┼───────┼───────┼────────┤
│ 1 │ 50.0 │ 250.0 │ 1.0 │
│ 2 │ 150.0 │ 250.0 │ 1.0 │
│ 3 │ 350.0 │ 150.0 │ 1.0 │
│ 4 │ 150.0 │ -50.0 │ 1.0 │
│ 5 │ 50.0 │ 250.0 │ 1.0 │
│ 6 │ 150.0 │ 250.0 │ 1.0 │
│ 7 │ 450.0 │ 150.0 │ 0.5 │
│ 8 │ 450.0 │ 150.0 │ 0.5 │
关于dataframe - 删除相同的行,以便在 Julia DataFrames 中对一列中的值进行求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49565436/