dataframe - 删除相同的行,以便在 Julia DataFrames 中对一列中的值进行求和

标签 dataframe julia

我知道可以从 Julia DataFrames 中的数据中删除相同的行,但是在删除相同的行时是否可以对相同行的一列元素进行求和?

我的意思是,对于下面的数据,我想对相同行的周期求和,而不对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    │

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

最佳答案

您至少有以下选择

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)。

更新:

正如评论中所提到的,上面的解决方案总结了行的循环值,这些值仅在它们的 ampmean 值方面相同,即它们可以原则上有不同的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/

相关文章:

plot - Julia plot 函数数组问题

dataframe - 从 DataFrame 或 JuliaDB 表中获取列名

python - 按组绘制变量平均值,每个条形中具有指定数量的实例

python - 如何在 Pandas 系列中找到与输入数字最接近的值?

python - 将数据框中的 NaN 值替换为同一列的平均值和另一列中的相同值

arrays - 具有多个范围的索引数组

julia - 是什么导致了发现的根数量增加而导致精度损失?

python - 从一个值中减去所有值并相乘。移至下一个值并重复

python - 在 python 中使用列表创建 json 数组

julia - 字典的向量化索引