DataFrame 列按引用子集

问题描述 投票:0回答:1

我有一个带有两个 UInt32 列的 DataFrame

x
。以下函数在第二列的子集中搜索第一列的值:

findfirst(==(x[y, 1]), x[1:(y - 1), 2])

y
是标量,例如10. 如果我正确理解 https://dataframes.juliadata.org/stable/lib/indexing
x[1:(y - 1), 2])
复制 DataFrame 的区域。我怎样才能让
findfirst
在适当的位置搜索
x
的那部分,即通过引用?

julia pass-by-reference dataframes.jl
1个回答
1
投票

您可以使用

@view

findfirst(==(x[y, 1]), @view x[1:(y - 1), 2])

说明

假设你有

df = DataFrame(rand(1:99,5,2), :auto);
而不是索引复制(如你的问题),而
@view
产生对数据的引用:

julia> df[1:3, 2]
3-element Vector{Int64}:
 62
 88
 11

julia> @view df[1:3, 2]
3-element view(::Vector{Int64}, 1:3) with eltype Int64:
 62
 88
 11

另请注意,如果您想要引用整个专栏,您可以执行

df[!, 2]
。查看下面的两个代码(一个给出参考,而另一个复制数据,从而复制分配的字节数)。

julia> @allocated df[!, 2]
0

julia> @allocated df[:, 2]
96
© www.soinside.com 2019 - 2024. All rights reserved.