1

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

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

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

4

1 回答 1

2

好吧,一旦我输入了这个,我就意识到了一种基于这个问题的方法。

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

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

于 2015-04-09T20:57:16.497 回答