Dataframe 按条件删除组

Dataframe 按条件删除组,dataframe,julia,Dataframe,Julia,假设我有以下数据帧 using DataFrames df = DataFrame(A = 1:10, B = ["a","a","b","b","b","c","c","c","c","d"]) grouped_df = groupby(df, "B") 我会有四个小组。我

假设我有以下数据帧

using DataFrames
df = DataFrame(A = 1:10, B = ["a","a","b","b","b","c","c","c","c","d"])
grouped_df  = groupby(df, "B")

我会有四个小组。我如何删除少于2行的组?例如,如何仅保留组
a
b
c
?我可以很容易地用for循环来完成,但我认为不是最佳方式。

如果您希望结果仍然分组,那么
过滤器
是最简单的:

julia> filter(x -> nrow(x) > 1, grouped_df)
GroupedDataFrame with 3 groups based on key: B
First Group (2 rows): B = "a"
 Row │ A      B
     │ Int64  String
─────┼───────────────
   1 │     1  a
   2 │     2  a
⋮
Last Group (4 rows): B = "c"
 Row │ A      B
     │ Int64  String
─────┼───────────────
   1 │     6  c
   2 │     7  c
   3 │     8  c
   4 │     9  c
如果您希望通过一次操作获得数据帧,请执行以下操作,例如:

julia> combine(grouped_df, x -> nrow(x) < 2 ? DataFrame() : x)
9×2 DataFrame
 Row │ B       A
     │ String  Int64
─────┼───────────────
   1 │ a           1
   2 │ a           2
   3 │ b           3
   4 │ b           4
   5 │ b           5
   6 │ c           6
   7 │ c           7
   8 │ c           8
   9 │ c           9
julia>combine(分组的_df,x->nrow(x)<2?数据帧():x)
9×2数据帧
一行│ B A
│ 字符串Int64
─────┼───────────────
1.│ a 1
2.│ a 2
3.│ b 3
4.│ b 4
5.│ b 5
6.│ C6
7.│ C7
8.│ c 8
9│ c 9

我想将其分组,但是当我运行第一个命令时,我得到了
错误:MethodError:没有方法匹配筛选器(::var“#15#16”,::GroupedDataFrame{DataFrame})
请确保您使用的是最新版本的DataFrames.jl,在编写本文时是0.22.5。这篇文章描述了检查它的方法:在这篇文章中,您了解了如何检查哪些内容可能会阻止DataFrames.jl在项目环境的最新版本中安装。