在 Julia DataFrame 中查找行

GLe*_*Lee 6 dataframe julia julia-dataframe

在 DataFrames.jl 中查找 DataFrame 中的行的规范方法是什么?

\n

例如,给定这个 DataFrame:

\n
\xe2\x94\x82 Row  \xe2\x94\x82 uuid                                 \xe2\x94\x82 name                          \n\xe2\x94\x82      \xe2\x94\x82 String                               \xe2\x94\x82 String                       \n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n\xe2\x94\x82 1    \xe2\x94\x82 0efae8bf-39e6-5d65-b05d-c8947f4cee2a \xe2\x94\x82 COSMA_jll                    \n\xe2\x94\x82 2    \xe2\x94\x82 17ccb2e5-db19-44b3-b354-4fd16d92c74e \xe2\x94\x82 CitableImage   \n
Run Code Online (Sandbox Code Playgroud)\n

鉴于名称“CitableImage”,检索 uuid 的最佳方法是什么?

\n

Bog*_*ski 10

我通常会使用:

filter(:name => ==("CitableImage"), df)
Run Code Online (Sandbox Code Playgroud)

它会生成一个数据框,因为您可以有多个匹配行。

如果您确定只有一行匹配,那么您还可以编写:

df[only(findall(==("CitableImage"), df.name)), :]
Run Code Online (Sandbox Code Playgroud)

(该only函数检查您是否只选择了一行)

如果你想使用索引获取数据框,你可以写:

df[df.name .== "CitableImage", :]
Run Code Online (Sandbox Code Playgroud)

或者

df[findall(==("CitableImage"), df.name), :]
Run Code Online (Sandbox Code Playgroud)

最后我们还提供了该subset函数,但它的正常用例有点不同,所以这里比以下更详细filter

subset(df, :name => ByRow(==("CitableImage")))
Run Code Online (Sandbox Code Playgroud)

如果您想要进行多次查找并希望它们高效,那么最好执行以下操作:

gdf = groupby(df, :name)
Run Code Online (Sandbox Code Playgroud)

然后执行以下操作:

gdf[("CitableImage",)]
Run Code Online (Sandbox Code Playgroud)

如果您进行多次此类查找,速度会快得多。