我为一个特定的县建立了一个简单的线性回归模型,现在我想测试它在不同县的准确性。目前,我知道我可以使用以下命令创建一个县的数据子集:tompkins =tax[strip.(tax.County, [' ']) .== "Tompkins",:]
.然而,以这种方式手动为每个县创建数据子集将非常麻烦。有没有一种更有效的方法可以收集所有县数据子集,以便我可以在它们上运行我的线性模型?
最佳答案
您正在寻找的是groupby
。
假设您有以下DataFrame
:
julia> df = DataFrame(Country=rand([:A,:B,:C],7), year=rand(2000:2020,7), tax=rand(7))
7×3 DataFrame
│ Row │ Country │ year │ tax │
│ │ Symbol │ Int64 │ Float64 │
├─────┼─────────┼───────┼──────────┤
│ 1 │ A │ 2014 │ 0.913118 │
│ 2 │ C │ 2003 │ 0.894182 │
│ 3 │ A │ 2018 │ 0.917585 │
│ 4 │ C │ 2011 │ 0.869531 │
│ 5 │ A │ 2011 │ 0.45841 │
│ 6 │ B │ 2001 │ 0.808954 │
│ 7 │ B │ 2008 │ 0.969813 │
您可以收集每个国家/地区的信息:
dfg = groupby(df, :Country);
现在:
julia> dfg[1]
3×3 SubDataFrame
│ Row │ Country │ year │ tax │
│ │ Symbol │ Int64 │ Float64 │
├─────┼─────────┼───────┼──────────┤
│ 1 │ A │ 2014 │ 0.913118 │
│ 2 │ A │ 2018 │ 0.917585 │
│ 3 │ A │ 2011 │ 0.45841 │
julia> dfg[2]
2×3 SubDataFrame
│ Row │ Country │ year │ tax │
│ │ Symbol │ Int64 │ Float64 │
├─────┼─────────┼───────┼──────────┤
│ 1 │ C │ 2003 │ 0.894182 │
│ 2 │ C │ 2011 │ 0.869531 │
julia> dfg[3]
2×3 SubDataFrame
│ Row │ Country │ year │ tax │
│ │ Symbol │ Int64 │ Float64 │
├─────┼─────────┼───────┼──────────┤
│ 1 │ B │ 2001 │ 0.808954 │
│ 2 │ B │ 2008 │ 0.969813 │
请注意,为了更快地搜索,最好使用符号
而不是字符串。您始终可以使用矢量化 Symbol.()
构造函数来转换 String
的任何列。
关于dataframe - 如何根据行的字符串值高效地抓取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64235567/