Dataframe 删除相同的行,以便一列中的值在数据帧中求和

Dataframe 删除相同的行,以便一列中的值在数据帧中求和,dataframe,julia,Dataframe,Julia,我知道可以从Julia DataFrames中的数据中删除相同的行,但是在删除相同的行时,是否可以对相同行的一列的元素求和 我的意思是,对于下面的数据,我想总结相同行的周期,而不总结amp和mean julia> Data1 8×3 DataFrames.DataFrame │ Row │ amp │ mean │ cycles │ ├─────┼───────┼───────┼────────┤ │ 1 │ 50.0 │ 250.0 │ 1.0 │ │ 2 │ 15

我知道可以从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中找到

我发现后者在快速而肮脏的基准测试中更快

注意,正如注释中所指出的,当
使用DataFramesMeta
()时,可以使用(df,[:amp,:mean],cycles=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    │
如注释中所述,上述解决方案总结了行的周期值,这些行的周期值仅在
amp
平均值方面相同,即原则上它们可以具有不同的
周期
值。如果想要区分具有不同<代码>周期<代码>值的行,则很容易采用上述第二种方法:

@by(df,[:amp,:mean,:cycles],cycles\u 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    │

或者使用
DataFramesMeta
中的
@by
,比如
@by(df,[:amp,:mean],cycles=sum(:cycles))
。使用这些,您不能保证有与问题状态相同的行<代码>周期
在进行求和时,行之间不一定相同。@niczky12确实如此。如果行实际上只有在它们相同时才应该求和(包括
循环
值),那么只需通过(df,[:amp,:mean,:cycles],cycles_sum=sum(:cycles))