df 是一个 120 万行的 DataFrame
valid 是一个包含 16000 个要过滤的有效值的数组
我尝试对过滤器使用列表理解,但由于搜索两个数组,速度非常慢。
df[[i in valid for i in df[:match],:]
什么是更快的方法来做到这一点?用在哪里?“过滤”功能?
搜索集合将非常快:
const validset = Set(valid)
filter((x)-> x.match in validset,df)
Run Code Online (Sandbox Code Playgroud)
一些表现:
julia> df=DataFrame(match=rand(1:(10^8),10^6));
julia> valid = collect(1:1_000_000); validset=Set(valid)
julia> @btime filter((x)-> x.match in $validset,$df)
173.341 ms (3999506 allocations: 61.30 MiB)
Run Code Online (Sandbox Code Playgroud)
或者 Bogumil 推荐的更快的版本:
julia> @btime filter(:match => in($validset),$df)
37.500 ms (23 allocations: 282.44 KiB)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
203 次 |
| 最近记录: |