在DataFrames.jl中的DataFrame中查找行的规范方法是什么?
例如,给定这个DataFrame:
│ Row │ uuid │ name
│ │ String │ String
├──────┼──────────────────────────────────────┼──────────────────────────────
│ 1 │ 0efae8bf-39e6-5d65-b05d-c8947f4cee2a │ COSMA_jll
│ 2 │ 17ccb2e5-db19-44b3-b354-4fd16d92c74e │ CitableImage
给定名称";CitableImage";,检索uuid的最佳方法是什么?
我通常会使用:
filter(:name => ==("CitableImage"), df)
这会产生一个数据帧,因为您可以有多个匹配行。
如果你确定只有一行匹配,那么你也可以写:
df[only(findall(==("CitableImage"), df.name)), :]
(only
函数检查您是否只选择了一行(
如果你想使用索引获得数据帧,你可以写:
df[df.name .== "CitableImage", :]
或
df[findall(==("CitableImage"), df.name), :]
最后,我们还提供了subset
函数,但它的正常用例有点不同,所以这里比filter
:更详细
subset(df, :name => ByRow(==("CitableImage")))
如果你想做很多查找并希望它们高效,那么最好做以下操作:
gdf = groupby(df, :name)
然后做:
gdf[("CitableImage",)]
如果你做很多这样的查找,速度会快得多。