【问题标题】:Julia DataFrames Unique RowsJulia DataFrames 唯一行
【发布时间】:2018-08-30 13:54:10
【问题描述】:

在 DF 中,我有两列(我们称它们为 A 和 B),其中 A 有重复,都是分类变量。我试图仅显示具有相应 B 值的唯一 A 行,我该怎么做?

当 B 是一个连续的 var 时,我可以做到这一点:

by(ptable, [:A], df -> mean(df[:B]))

【问题讨论】:

  • 嗨,凯文,欢迎来到 StackOverflow!展示您尝试过的内容并提供每个人都可以复制和粘贴的最小示例通常是一个好主意。

标签: dataframe julia unique rows


【解决方案1】:

这对我有用

df[!nonunique(df[:,[:A]]), [:A, :B]]

【讨论】:

  • 您可以将其写成更短的unique(df, :A),这与您的答案相同。但是,这不会产生您想要的内容,因为每个唯一值 :A 列只有一个值 :B 列,并且对于相同的 @987654326 值,:B 的值可能不同@在你的DataFrame。我的解决方案列出了与:A 的单个值相对应的:B 的所有值。所以你选择什么取决于你想要什么。
【解决方案2】:

你可以像这样得到想要的结果:

by(df, :A, x -> [x.B])

现在您的DataFrame 将有两列:A:x1,并且:x1 列将保存:B 列的所有值,对应于:A 的唯一值(因此:x1 列将是一个向量的向量)。

编辑:从 DataFrames.jl 0.22 开始使用以下语法:

combine(groupby(df, :A), :B => Ref => :B)

【讨论】:

  • 当我运行你写的那一行时,我得到了这个错误:SubDataFrame has no field B..你怎么看?谢谢
  • 您可能使用的是 Julia 0.6 而不是 Julia 0.7 或 1.0。如果是这样,请使用 x[:B] 它是等效的。点符号是在 Julia 0.7 中引入的。
  • 为了清楚起见,Julia 0.6 中的整行应该是 by(df, :A, x -> [x[:B]])
  • 作为参考,by 已被弃用,取而代之的是 combine(groupby(...), ...)。但最好使用unique(df, :A)
  • 实际上它完全改变了(我相信有更好的方法)。我已经编辑了答案。
猜你喜欢
  • 1970-01-01
  • 2021-02-10
  • 1970-01-01
  • 1970-01-01
  • 2021-11-20
  • 2019-01-01
  • 2022-10-06
  • 1970-01-01
相关资源
最近更新 更多