DataFramesMeta能否实现多列批量转换与汇总?
用DataFramesMeta实现多列分组批量统计(均值+求和)
当然可以用DataFramesMeta复现你给出的DataFrames批量操作效果,以下是几种等效写法:
首先确保导入所需包:
using DataFrames, DataFramesMeta, Statistics
创建测试DataFrame的代码和你提供的一致:
df = DataFrame( a=string.("cat", rand(1:3, 100)), x=rand(1:100, 100), y=rand(2:10:100, 100), z=rand(0.5:0.1:2, 100) )
写法1:逐列显式定义统计项(直观易读)
用@by宏直接按:a分组,然后为每列定义均值和求和项:
@by df :a begin :x_mean = mean(:x) :x_sum = sum(:x) :y_mean = mean(:y) :y_sum = sum(:y) :z_mean = mean(:z) :z_sum = sum(:z) end
写法2:批量处理多列+多函数(更简洁)
这种写法和你原DataFrames代码的逻辑最贴近,通过cols()批量指定目标列,同时绑定多个统计函数:
@combine(groupby(df, :a), cols([:x, :y, :z]) .=> [mean, sum] .=> [:mean, :sum] )
写法3:先分组再合并(分步清晰)
先通过@groupby生成分组对象,再用@combine批量计算:
gdf = @groupby df :a @combine gdf cols([:x, :y, :z]) .=> [mean, sum] .=> [:mean, :sum]
以上三种写法的输出结果和你原代码combine(groupby(df,:a), [:x,:y,:z].=>[mean sum])完全一致,都会生成包含a列,以及x_mean、x_sum、y_mean、y_sum、z_mean、z_sum的结果DataFrame。
内容的提问来源于stack exchange,提问作者Eliezer Otero
相关产品推荐
相关产品推荐

