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在项目环境的最新版本中安装。