Dataframe 如何在Julia中嵌套/取消嵌套数据帧?
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 │ ├─────┼───────┼
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])
这里采样可能是一个按行操作。好了,开始吧!如果有多个变量定义一个组呢?在我的例子中,需要从每个组中选择的行数的数据存储在单独的数据框中。我如何从数据框中创建一个字典,如您的示例中所示?值得吗?我的意思是仅仅连接两个数据帧似乎更简单。这取决于用例。您始终可以遍历这些组。我想把它做成一行。