Dataframe 如何在Julia中嵌套/取消嵌套数据帧?

Dataframe 如何在Julia中嵌套/取消嵌套数据帧?,dataframe,julia,Dataframe,Julia,Julia是否有来自的nest和unnest函数的类似物?特别是,是否有一种方法可以使用DataFrames.jl进行有效的嵌套/取消测试操作?假设您有以下DataFrame: julia> d = DataFrame(g=[1,1,1,2,2,3,3,], val1=1:7, val2 = 'a':'g') 7×3 DataFrame │ Row │ g │ val1 │ val2 │ │ │ Int64 │ Int64 │ Char │ ├─────┼───────┼

Julia是否有来自的
nest
unnest
函数的类似物?特别是,是否有一种方法可以使用DataFrames.jl进行有效的嵌套/取消测试操作?

假设您有以下
DataFrame

julia> d = DataFrame(g=[1,1,1,2,2,3,3,], val1=1:7, val2 = 'a':'g')
7×3 DataFrame
│ Row │ g     │ val1  │ val2 │
│     │ Int64 │ Int64 │ Char │
├─────┼───────┼───────┼──────┤
│ 1   │ 1     │ 1     │ 'a'  │
│ 2   │ 1     │ 2     │ 'b'  │
│ 3   │ 1     │ 3     │ 'c'  │
│ 4   │ 2     │ 4     │ 'd'  │
│ 5   │ 2     │ 5     │ 'e'  │
│ 6   │ 3     │ 6     │ 'f'  │
│ 7   │ 3     │ 7     │ 'g'  │
并假设您希望从
g
列定义的每个组中采样一个元素。 这可以通过以下方式实现:

julia> DataFrame([rand(eachrow(gr)) for gr in groupby(d,:g)])
3×3 DataFrame
│ Row │ g     │ val1  │ val2 │
│     │ Int64 │ Int64 │ Char │
├─────┼───────┼───────┼──────┤
│ 1   │ 1     │ 2     │ 'b'  │
│ 2   │ 2     │ 4     │ 'd'  │
│ 3   │ 3     │ 6     │ 'f'  │
希望这是你需要的

编辑 如果希望每个组的元素计数不同,可以执行以下操作:

julia> g_to_rows=Dict(1=>4,2=>3,3=>7);   # desired element counts

julia> [ gr[rand(1:nrow(gr),g_to_rows[gr.g[1]]), :] for gr in groupby(d,:g)]
3-element Array{DataFrame,1}:
 4×3 DataFrame
│ Row │ g     │ val1  │ val2 │
│     │ Int64 │ Int64 │ Char │
├─────┼───────┼───────┼──────┤
│ 1   │ 1     │ 1     │ 'a'  │
│ 2   │ 1     │ 1     │ 'a'  │
│ 3   │ 1     │ 3     │ 'c'  │
│ 4   │ 1     │ 2     │ 'b'  │
 3×3 DataFrame
│ Row │ g     │ val1  │ val2 │
│     │ Int64 │ Int64 │ Char │
├─────┼───────┼───────┼──────┤
│ 1   │ 2     │ 5     │ 'e'  │
│ 2   │ 2     │ 5     │ 'e'  │
│ 3   │ 2     │ 5     │ 'e'  │
 7×3 DataFrame
│ Row │ g     │ val1  │ val2 │
│     │ Int64 │ Int64 │ Char │
├─────┼───────┼───────┼──────┤
│ 1   │ 3     │ 7     │ 'g'  │
│ 2   │ 3     │ 6     │ 'f'  │
│ 3   │ 3     │ 6     │ 'f'  │
│ 4   │ 3     │ 7     │ 'g'  │
│ 5   │ 3     │ 7     │ 'g'  │
│ 6   │ 3     │ 6     │ 'f'  │
│ 7   │ 3     │ 6     │ 'f'  │

你能描述一个具体的用例吗?请注意,如果转换(例如
转换
)返回
数据帧
,则嵌套会自动发生。但是通常不需要嵌套,因为您可以迭代
groupby
的结果来对
子数据帧执行操作,或者使用
combine
对它们应用操作并存储结果。我想按组对
数据帧中的行进行采样。不同的组的行数也不同。在这种情况下,我需要为每个操作同时使用一个子数据框和一个整数(不是数组),因此如果一个子数据框和一个整数(样本中的行数)都在一行中就更好了。谢谢您的回答!然而,关键是我需要从不同的组中采样不同数量的行。这就是嵌套的方便之处,因为从每个组采样所需的行数可以表示为每行嵌套数据帧的单个值。为了让我的想法更清楚:
DataFrame(g=1:3,data_to_sample_from=[(DataFrame(val1=1:3,val2='a':'c')),DataFrame(val1=4:5,val2='d':'e')),数据帧(val1=6:7,val2='f':'g')],所需的行数=[4,3,7])
这里采样可能是一个按行操作。好了,开始吧!如果有多个变量定义一个组呢?在我的例子中,需要从每个组中选择的行数的数据存储在单独的数据框中。我如何从数据框中创建一个字典,如您的示例中所示?值得吗?我的意思是仅仅连接两个数据帧似乎更简单。这取决于用例。您始终可以遍历这些组。我想把它做成一行。