DataFrames.jl按组计数指定列名触发MethodError,求原因及解决方法
错误原因与正确实现方式
错误原因
你错误地将聚合操作nrow => :n传递给了groupby函数,但groupby仅负责对DataFrame进行分组,并不接收聚合逻辑参数,这就触发了MethodError——不存在匹配该参数组合的groupby方法。
正确实现方式
聚合逻辑需要传递给combine函数,它负责对分组后的数据集执行聚合操作并生成结果。以下是几种可行的写法:
方法1:使用nrow指定计数列名
# 修正参数传递顺序,将聚合逻辑交给combine combine(groupby(df, [:group, :subgroup]), nrow => :n)
方法2:使用length替代nrow
效果与上述方法完全一致,只是换用了更通用的length函数:
combine(groupby(df, [:group, :subgroup]), :group => length => :n)
方法3:使用@by宏简化代码
如果偏好更简洁的语法,可以使用DataFrames.jl配套的@by宏(需先导入DataFramesMeta包):
using DataFramesMeta @by df, [:group, :subgroup] :n = nrow(_)
运行结果
执行上述正确代码后,会得到按group和subgroup分组的计数结果:
4×3 DataFrame Row │ group subgroup n │ String String Int64 ─────┼───────────────────────── 1 │ A X 3 2 │ A Y 3 3 │ B X 2 4 │ B Y 4
内容的提问来源于stack exchange,提问作者Quinten
相关产品推荐
相关产品推荐

