【问题标题】:How to "join" with the split-apply-combine method in Julia如何在 Julia 中使用 split-apply-combine 方法“加入”
【发布时间】:2015-04-09 20:57:16
【问题描述】:

我想在 Julia 中执行一个有点复杂的连接(在 SQL 意义上),但我不知道如何让它在 split-apply-combine 方法中工作(尽管它可以写成手动取出)。看起来这应该很容易做到。问题看起来像这样。我有一个关于海龟赛跑数据的 DataFrame:

using DataFrames
data = DataFrame()
data[:turtle] = ["Suzy", "Suzy", "Bob", "Batman", "Batman", "Batman", "Bob"]
data[:event] = ["5k", "5k", "1k", "5k", "5k", "1k", "1k"]
data[:time] = [6.2 , 6.7 , 2.1, 3.2, 3.1, 0.9, 2.4]
data[:photo] =["111.jpg","123.jpg","145.jpg","167.jpg","189.jpg","190.jpg","195.jpg"]
data

我想要一个数据表,其中仅包含该表的行,这些行是每只海龟的个人(turtlenal?)在任何情况下它们运行的​​最好的。我几乎可以得到我需要的东西

bestFinishes = by(data, [:turtle, :event]) do df
     DataFrame(fastestTime = minimum(df[:time]))
end

但我还需要匹配行的照片列。我该怎么做?

【问题讨论】:

    标签: datatable julia split-apply-combine


    【解决方案1】:

    好吧,当我输入这个时,我意识到基于this question 的一种方法。

    bestFinishes = by(data, [:turtle, :event]) do df
        DataFrame(fastestTime = minimum(df[:time]), winningPhoto = df[indmin(df[:time]),:photo] )
    end
    

    但是,更通用的方法是

    bestFinishes = by(data, [:turtle, :event]) do df
        thisFastestTime = minimum(df[:time])
        df[df[:time].==thisFastestTime,:]
    end
    

    如果您只想有效地从非常大的数据集中修剪行,这会使事情变得更容易。我会看看是否可以在文档中添加这样的示例,因为它似乎没有被涵盖(或者只是假设比我更熟悉这种方法)。

    【讨论】:

      猜你喜欢
      • 2014-12-27
      • 2017-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-14
      • 1970-01-01
      相关资源
      最近更新 更多