我正在尝试使用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>
答案 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)