gpt4 book ai didi

dataframe - 高效设置交集以获取DataFrame中的行

转载 作者:行者123 更新时间:2023-12-02 01:23:36 26 4
gpt4 key购买 nike

我有一个包含与这个问题相关的 3 个值的数据框,:ID , :Position , :Probability .每行都是唯一的,但多行可能具有相同的 ID .我想要做的是获取所有行的特定值 Position , 共享 ID任何具有 Probability 的行高于不同位置的某个值。

例如,假设我有以下 DataFrame (df):

1020692×8 DataFrames.DataFrame
│ Row │ ID │ Position │ Probability │
├─────────┼─────┼───────────────┼─────────────┤
│ 1 │ 425 │ "first" │ 0.02 │
│ 2 │ 425 │ "last" │ 0.03 │
│ 3 │ 425 │ "penultimate" │ 0.02 │
│ 4 │ 425 │ "other" │ 0.04 │
│ 5 │ 421 │ "first" │ 0.44 │
│ 6 │ 421 │ "last" │ 0.85 │
│ 7 │ 421 │ "second" │ 0.59 │
│ 8 │ 421 │ "other" │ 1.0 │

如果我将阈值设置为 0.8 ,我想以所有行结束 :Position == "first"如果那个:ID:Position == "last" && :Probability > 0.8 .换句话说,我想要第 5 行,因为第 6 行有一个 :Probability > 0.8 ,但不是第 1 行,因为第 2 行不是。

检查阈值的行不会总是在我想保留的行之后。并非所有行 :Position == "first"会有一个 "last"要检查的行,但最多只有一个。

我试图解决这个问题的方法是制作一个包含所有 ID 的矢量在lastProbability > 0.8 的位置,然后尝试使用 in() 对数据框进行子集化.所以……

firsts = df[df[:Position] .== "first", :]
lasts = df[df[:Position] .== "last", :]
meetsthreshold = lasts[lasts[:Probability] .> 0.8, :ID]

final = firsts[[in(i, meetsthreshold) for i in firsts[:ID]], :]

我用 ID 的超短向量对此进行了测试s 并且它有效,但它在我的实际数据上非常滞后(其中 length(meetsthreshold) > 100k)。我想我想要的基本上是一个集合交集,如果我用 ID 来做s(例如 intersect(Set(firsts[:ID]), Set(meetsthreshold)) )它基本上是瞬时的。有没有一种方法可以与数据框进行集合交集,以便我可以实际获取行?

最佳答案

我有点像个白痴 - 解决方案只是使用集合而不是向量来搜索。例如:

firsts = df[df[:Position] .== "first", :]
lasts = df[df[:Position] .== "last", :]
meetsthreshold = Set(lasts[lasts[:Probability] .> 0.8, :ID])

final = firsts[Vector{Bool}([in(i, meetsthreshold) for i in firsts[:ID]]), :]

运行约 1 秒。

关于dataframe - 高效设置交集以获取DataFrame中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38490858/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com