提问人:Pascal 提问时间:11/16/2023 最后编辑:Pascal 更新时间:11/17/2023 访问量:56
使用 vector 扩展 DataFrame
Expand dataframe with vector
问:
假设我有一个 DataFrame 和一个向量a
y
a = DataFrame(t = [0; 0], x = [1, 2])
y = [0.1, 0.2, 0.3]
我怎样才能将这两者结合起来,实现如下目的,优先使用?DataFramesMeta.jl
Row │ t x
│ Float64 Int64
─────┼────────────────
1 │ 0.1 1
2 │ 0.2 1
3 │ 0.3 1
4 │ 0.1 2
5 │ 0.2 2
6 │ 0.3 2
编辑:我更喜欢使用,因为我喜欢在管道中使用它。DataFramesMeta.jl
@chain
答:
0赞
BallpointBen
11/16/2023
#1
你真的不需要 DataFramesMeta;一个简单的连接就可以了。通过仅使用一个不同元素创建两列,连接成为笛卡尔乘积。t
julia> a = DataFrame(t = [0; 0], x = [1, 2])
2×2 DataFrame
Row │ t x
│ Int64 Int64
─────┼──────────────
1 │ 0 1
2 │ 0 2
julia> b = DataFrame(t = 0, y = y)
3×2 DataFrame
Row │ t y
│ Int64 Float64
─────┼────────────────
1 │ 0 0.1
2 │ 0 0.2
3 │ 0 0.3
julia> select(leftjoin(b, a, on=:t), :y => :t, :x)
6×2 DataFrame
Row │ t x
│ Float64 Int64?
─────┼─────────────────
1 │ 0.1 1
2 │ 0.2 1
3 │ 0.3 1
4 │ 0.1 2
5 │ 0.2 2
6 │ 0.3 2
评论
0赞
Pascal
11/17/2023
多谢。优雅的解决方案。我询问了 DataFramesMeta.jl,因为我想在一系列管道中执行此操作。
0赞
Dan Getz
11/17/2023
#2
也许您正在寻找:
julia> @combine(a,:t = repeat(y,length(:t)),
:x = repeat(:x; inner=length(y)))
6×2 DataFrame
Row │ t x
│ Float64 Int64
─────┼────────────────
1 │ 0.1 1
2 │ 0.2 1
3 │ 0.3 1
4 │ 0.1 2
5 │ 0.2 2
6 │ 0.3 2
这可以根据需要推广到其他情况。关键位是它需要多行,可以返回更多或更少的行,这与 / 保持行数不同。@combine
@select
@transform
评论