Dataframe 删除相同的行,以便一列中的值在数据帧中求和
我知道可以从Julia DataFrames中的数据中删除相同的行,但是在删除相同的行时,是否可以对相同行的一列的元素求和 我的意思是,对于下面的数据,我想总结相同行的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
周期
,而不总结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))
。