我知道可以从Julia DataFrames中的数据中删除相同的行,但是可以在删除相同的行时总结相同行的一列的元素吗?
我的意思是下面的数据我想总结相同行的cycles
而不总结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 │
感谢您提前提供任何帮助。
答案 0 :(得分:3)
您至少有以下选项
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中找到。
我发现后者在快速而肮脏的基准测试中更快。
请注意,正如评论中指出的那样,@by(df, [:amp, :mean], cycles=sum(:cycles))
(github repo)可以使用更好的符号using DataFramesMeta
。
<强>更新强>
正如评论中所提到的,上述解决方案总结了行的周期值,这些行仅与amp
和mean
值相同,即它们原则上可以具有不同的{{ 1}}值。如果想要区分具有不同cycle
值的行,则很容易适应上述第二种方法:
cycle
在附注中,复制数据集:
@by(df, [:amp, :mean, :cycles], cycles_sum=sum(:cycles))