在Julia中使用DataFramesMeta进行分组后,在DataFrame中选择行

时间:2015-09-14 22:54:56

标签: linq julia

我正在尝试使用DataFrame宏选择@linq中的某些数据行:

using DataFrames, DataFramesMeta
df=DataFrame(x = ["a", "a", "a", "b", "b", "b"], 
             y = [1, 2, 3, 2, 3, 4], 
             z = [100, 200, 300, 456, 345, 234])

| Row | x   | y | z   |
|-----|-----|---|-----|
| 1   | "a" | 1 | 100 |
| 2   | "a" | 2 | 200 |
| 3   | "a" | 3 | 300 |
| 4   | "b" | 2 | 456 |
| 5   | "b" | 3 | 345 |
| 6   | "b" | 4 | 234 |

我正在尝试为给定类型的y选择具有最大x的行,即

| Row | x   | y | z   |
|-----|-----|---|-----|
| 1   | "a" | 3 | 300 |
| 2   | "b" | 4 | 234 |

因此,我按列x进行分组,并添加一个包含最大值

的列
@linq df |> @by(:x, maxY = maximum(:y)) 

给出了

| Row | x   | maxY |
|-----|-----|------|
| 1   | "a" | 3    |
| 2   | "b" | 4    |

但是我没有看到如何将相应的z条目放回去。可能会是join但我不知道如何做到这一点或以另一种简单的方式获得结果。 / p>

1 个答案:

答案 0 :(得分:1)

您可以在加入on=[:x,:y]的一行中执行此操作但要实现此目的,您需要将maximum(:y)y命名为maxY

df2 = @linq df |> by(:x, y=maximum(:y)) |> join(df, on=[:x, :y])

您稍后可以将该列重命名为预期的maxY

rename!(df2, :y, :maxY)