如何在 Julia 的 DataFrame 中设置索引?

rap*_*123 5 dataframe julia

我有一个 DataFrame dfPaths 如下(我正在使用 Julia)

在此输入图像描述

我想将列 arc 定义为该数据帧的索引,因此稍后我可以使用 dfPaths[arc, "to"] 访问特定弧的列“to”。

我知道在这个例子中,arc = row,但在将来,我可能会对 arc 有不同的值,而不是连续的数字。

我尝试过使用setindex!但没有成功。我希望得到与 Python 中的 df.set_index() 相同的结果。

预先感谢您的任何帮助

Bog*_*ski 5

DataFrames.jl 使用不同的设置索引的方法。

\n

请执行下列操作:

\n
julia> dfPaths = DataFrame(arc=["a", "b", "a", "c", "d"], from=[1,1,2,3,2], to=[2,3,3,2,4])\n5\xc3\x973 DataFrame\n Row \xe2\x94\x82 arc     from   to\n     \xe2\x94\x82 String  Int64  Int64\n\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\n   1 \xe2\x94\x82 a           1      2\n   2 \xe2\x94\x82 b           1      3\n   3 \xe2\x94\x82 a           2      3\n   4 \xe2\x94\x82 c           3      2\n   5 \xe2\x94\x82 d           2      4\n\njulia> gdf = groupby(dfPaths, :arc);\n\njulia> gdf[("a",)]\n2\xc3\x973 SubDataFrame\n Row \xe2\x94\x82 arc     from   to\n     \xe2\x94\x82 String  Int64  Int64\n\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\n   1 \xe2\x94\x82 a           1      2\n   2 \xe2\x94\x82 a           2      3\n\njulia> gdf[("b",)]\n1\xc3\x973 SubDataFrame\n Row \xe2\x94\x82 arc     from   to\n     \xe2\x94\x82 String  Int64  Int64\n\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\n   1 \xe2\x94\x82 b           1      3\n
Run Code Online (Sandbox Code Playgroud)\n

注意:

\n
    \n
  1. 索引时你总是会得到一个数据框(DataFrames.jl 对索引时处理维度很严格,你总是会得到一个数据框);这意味着,如果您希望索引是唯一的,only(gdf[("b",)])["from"]那么如果它确实是唯一的,您将获得该列的值,如果它不是唯一的,则会出现错误。
  2. \n
  3. 您始终需要传递一个元组(也允许其他类型,但这是一个侧面)。在 pandas 中,您通常也使用元组,但您可以跳过这一点。目前,在 DataFrames.jl 中,我们选择严格执行 - 您需要输入更多内容,但您确信执行的内容正是您的意思。
  4. \n
  5. DataFrames.jl 中的索引总是很快(即 O(1)),而在 pandas 中则不能保证(并且在某些情况下查找速度可能慢至 O(n))。
  6. \n
\n