Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Julia 从另一个数据帧中提取单独的分组数据帧_Julia - Fatal编程技术网

Julia 从另一个数据帧中提取单独的分组数据帧

Julia 从另一个数据帧中提取单独的分组数据帧,julia,Julia,将组提取到单独的数据帧中的最佳/最惯用方法是什么?这在许多方面都很有用(例如,为每个组训练单独的模型,每个组的数据可视化,保存数据的特定子集等) 此类问题的一个最小示例可能是: using DataFrames df = DataFrame(Dict(:groups => ["A", "B", "A"], :val1 => [1, 2, -4], :val2 => [3, 9, 1])) 理想的输

将组提取到单独的
数据帧中的最佳/最惯用方法是什么?这在许多方面都很有用(例如,为每个组训练单独的模型,每个组的数据可视化,保存数据的特定子集等)

此类问题的一个最小示例可能是:

using DataFrames
df = DataFrame(Dict(:groups => ["A", "B", "A"],
                    :val1 => [1, 2, -4],
                    :val2 => [3, 9, 1]))
理想的输出是:

group_dict = Dict("A" => DataFrame(Dict(:val1 => [1, -4], :val2 => [3, 1])),
                  "B" => DataFrame(Dict(:val1 => [2], :val2 => [9])))
一个干净的解决方案是利用
Query.jl
@groupby

using Query
df |> @groupby(_.groups) |> ?? |> Dict

但是,我仍停留在最后一步(即将其转换为字典或其他命名集合)。

您可以使用
DataFrames.groupby(df,:groups)
返回GroupedDataFrame,它是子数据帧的集合。

您可以使用
DataFrames.groupby(df,:groups)
返回GroupedDataFrame,它是子数据帧的集合。

以下内容:

using DataFrames
df = DataFrame(Dict(:groups => ["A", "B", "A"],
                    :val1 => [1, 2, -4],
                    :val2 => [3, 9, 1]))

dict = Dict([letter => df[df[!, :groups] .== letter, 2:3]
    for letter in unique(df[!, :groups])])

println(dict)
屈服

Dict(
"B" => 1×2 DataFrame
│ Row │ val1  │ val2  │
│     │ Int64 │ Int64 │
├─────┼───────┼───────┤
│ 1   │ 2     │ 9     │,

"A" => 2×2 DataFrame
│ Row │ val1  │ val2  │
│     │ Int64 │ Int64 │
├─────┼───────┼───────┤
│ 1   │ 1     │ 3     │
│ 2   │ -4    │ 1     │)
这看起来是你需要的。注意:在理解语句中需要unique(),因为与dataframe groupby不同,Dict有一个限制,即它需要:组作为键是唯一的。

如下:

using DataFrames
df = DataFrame(Dict(:groups => ["A", "B", "A"],
                    :val1 => [1, 2, -4],
                    :val2 => [3, 9, 1]))

dict = Dict([letter => df[df[!, :groups] .== letter, 2:3]
    for letter in unique(df[!, :groups])])

println(dict)
屈服

Dict(
"B" => 1×2 DataFrame
│ Row │ val1  │ val2  │
│     │ Int64 │ Int64 │
├─────┼───────┼───────┤
│ 1   │ 2     │ 9     │,

"A" => 2×2 DataFrame
│ Row │ val1  │ val2  │
│     │ Int64 │ Int64 │
├─────┼───────┼───────┤
│ 1   │ 1     │ 3     │
│ 2   │ -4    │ 1     │)

这看起来是你需要的。注意:在理解语句中需要unique(),因为与dataframe groupby不同,Dict有一个限制,即它需要:组作为键是唯一的。

这是推荐的方法,使用merged(将很快)可以根据值对其进行索引。这是推荐的方法,而使用merged(将很快)您将能够根据值对其进行索引。