如何将一个数据框附加到另一个数据框,类似于SQL union
或R' rbind
?
假设我的数据框A
和B
定义如下。
A = DataFrame(x = [1, 2, 3], y = [4, 5, 6])
B = DataFrame(x = [4, 5, 6], y = [7, 8, 9])
解决这个问题的一种方法如下:
C = deepcopy(A)
for i = 1:size(B, 1)
push!(C, Array(B[i,:]))
end
虽然这有效,但对我来说感觉有点笨拙。是否有更好或更惯用的方法来做到这一点?
答案 0 :(得分:5)
数组连接[A;B]
是将一个DataFrame
的行添加到另一个的最简单方法:
julia> A = DataFrame(x = [1, 2, 3], y = [4, 5, 6]);
julia> B = DataFrame(x = [4, 5, 6], y = [7, 8, 9]);
julia> [A;B]
6x2 DataFrames.DataFrame
| Row | x | y |
|-----|---|---|
| 1 | 1 | 4 |
| 2 | 2 | 5 |
| 3 | 3 | 6 |
| 4 | 4 | 7 |
| 5 | 5 | 8 |
| 6 | 6 | 9 |
答案 1 :(得分:0)
您还可以执行vcat(A,B)
将两个数据帧附加在一起。
如果数据帧位于数组中,则可以使用像...
这样的splat运算符(vcat(AB...)
)
答案 2 :(得分:0)
我有同样的问题。事实证明,使用append!
函数是一种更有效的方法:
append!(A,B)
这将修改原始数据帧A
。如果要创建新的数据框,可以执行以下操作:
C = deepcopy(A)
append!(C,B)
请注意,此解决方案比执行C=vcat(A,B)
更为有效。运行以下代码以观察内存分配。
A = DataFrame(x = [1, 2, 3], y = [4, 5, 6])
B = DataFrame(x = [4, 5, 6], y = [7, 8, 9])
## method 1: deepcopy append!
@time let
C=deepcopy(A)
append!(C,B)
end
## method 2: vcat
@time vcat(A,B)
## method 3: modifies A
@time append!(A,B)
我分别找到(27个分配:2.063 KiB),(78个分配:5.750 KiB)和(8个分配:352字节)。