在 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 个元素)。从技术上讲,它可能会起作用,但我们认为这可能会造成混淆。
我正在尝试使用 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 个元素)。从技术上讲,它可能会起作用,但我们认为这可能会造成混淆。