删除相同的行,以便在Julia DataFrames中汇总一列中的值

时间:2018-03-29 21:39:02

标签: dataframe julia

我知道可以从Julia DataFrames中的数据中删除相同的行,但是可以在删除相同的行时总结相同行的一列的元素吗?

我的意思是下面的数据我想总结相同行的cycles而不总结ampmean

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    │

感谢您提前提供任何帮助。

1 个答案:

答案 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

<强>更新

正如评论中所提到的,上述解决方案总结了行的周期值,这些行仅与ampmean值相同,即它们原则上可以具有不同的{{ 1}}值。如果想要区分具有不同cycle值的行,则很容易适应上述第二种方法:

cycle

在附注中,复制数据集:

@by(df, [:amp, :mean, :cycles], cycles_sum=sum(:cycles))