提问人:user 提问时间:5/16/2023 更新时间:5/16/2023 访问量:22
按引用的 DataFrame 列子集
DataFrame Column Subset by Reference
问:
我有一个包含两个 UInt32 列的 DataFrame。以下函数从第二列的子集中的第一列中搜索值:x
findfirst(==(x[y, 1]), x[1:(y - 1), 2])
y
是一个标量,例如 10。如果我理解正确 https://dataframes.juliadata.org/stable/lib/indexing,请复制 DataFrame 的区域。我怎样才能在适当的位置进行搜索,即通过引用?x[1:(y - 1), 2])
findfirst
x
答:
1赞
Przemyslaw Szufel
5/16/2023
#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
评论