在 Julia 中使用新的 DataFrames.combine 返回列作为参数

Use new DataFrames.combine returned column as argument in Julia

我正在尝试使用 DataFrames.combine 链接多个转换。所需的最终 DataFrame 如下所示。

using DataFrames, Statistics

df = DataFrame(x = repeat([1], 4))

df_2 = combine(df, 
        :x => sum => :sum_x)

df_2.sqrt_sum_x .= sqrt.(df_2.sum_x)

println(df_2)
#1×2 DataFrame
# Row │ sum_x  sqrt_sum_x 
#     │ Int64  Float64
#─────┼───────────────────
#   1 │     4         2.0

我想知道是否有任何方法可以通过一次调用 combine 来实现之前的结果。例如。通过使用新的 target_cols :sum_x 作为参数中的列(参见下面的代码)。但是,这似乎抛出一个 ArgumentError,因为它找不到新计算的 :sum_x 列。

combine(df, 
        :x => sum => :sum_x,
        :sum_x => sqrt => :sqrt_sum_x)
# ERROR: ArgumentError: column name :sum_x not found in the data frame

目前不允许这样做。原因是 combine 中转换的执行顺序未定义。特别是,在某些情况下,这些操作使用 multi-threading 并行执行(以提高性能)。

此外,这样的操作在解释时可能会出现问题,例如,如果您会这样写:

combine(df, 
        :x => sum => :sum_x,
        [:x, :sum_x] => (+) => :x_plus_sum_x)

然后在转型中:

[:x, :sum_x] => + => :x_plus_sum_x

:x 将来自源数据框 df(并且有 4 个元素),而 :sum_x 将来自“尚不存在”的目标数据框(并且有 1 个元素)。从技术上讲,它可能会起作用,但我们认为这可能会造成混淆。