首页 > 解决方案 > 如何在 Julia 中将 GroupedDataFrame 转换为 DataFrame?

问题描述

groupby我使用以下函数对 DataFrame 的子集进行了计算:

using RDatasets
iris = dataset("datasets", "iris")
describe(iris)
iris_grouped = groupby(iris,:Species)
iris_avg = map(:SepalLength => mean,iris_grouped::GroupedDataFrame)

现在我想绘制结果,但我收到以下绘图的错误消息:

@df iris_avg bar(:Species,:SepalLength)

仅支持表

绘制数据的最佳方法是什么?我的想法是创建一个 DataFrame 并从那里开始。我将如何做到这一点,即如何将 GroupedDataFrame 转换为单个 DataFrame?谢谢!

标签: dataframejuliaplots.jl

解决方案


转换GroupedDataFrame为对它的DataFrame公正调用DataFrame,例如:

julia> DataFrame(iris_avg)
3×2 DataFrame
│ Row │ Species      │ SepalLength_mean │
│     │ Categorical… │ Float64          │
├─────┼──────────────┼──────────────────┤
│ 1   │ setosa       │ 5.006            │
│ 2   │ versicolor   │ 5.936            │
│ 3   │ virginica    │ 6.588            │

在你的情况下。

你也可以写:

julia> combine(:SepalLength => mean, iris_grouped)
3×2 DataFrame
│ Row │ Species      │ SepalLength_mean │
│     │ Categorical… │ Float64          │
├─────┼──────────────┼──────────────────┤
│ 1   │ setosa       │ 5.006            │
│ 2   │ versicolor   │ 5.936            │
│ 3   │ virginica    │ 6.588            │

在原件GroupedDataFrame

julia> by(:SepalLength => mean, iris, :Species)
3×2 DataFrame
│ Row │ Species      │ SepalLength_mean │
│     │ Categorical… │ Float64          │
├─────┼──────────────┼──────────────────┤
│ 1   │ setosa       │ 5.006            │
│ 2   │ versicolor   │ 5.936            │
│ 3   │ virginica    │ 6.588            │

在原件上DataFrame

我在这里将转换写为第一个参数,但通常,您会将其写为最后一个参数(这样您就可以传递多个转换),例如:

julia> by(iris, :Species, :SepalLength => mean, :SepalWidth => minimum)
3×3 DataFrame
│ Row │ Species      │ SepalLength_mean │ SepalWidth_minimum │
│     │ Categorical… │ Float64          │ Float64            │
├─────┼──────────────┼──────────────────┼────────────────────┤
│ 1   │ setosa       │ 5.006            │ 2.3                │
│ 2   │ versicolor   │ 5.936            │ 2.0                │
│ 3   │ virginica    │ 6.588            │ 2.2                │

推荐阅读