#dataframe #julia
#фрейм данных #джулия
Вопрос:
У меня есть набор данных, изображенный здесь:
Я построил простую модель линейной регрессии для одного конкретного округа, и теперь я хочу проверить ее точность в разных округах. В настоящее время я знаю, что могу создать подмножество данных для одного округа, используя следующее : tompkins = tax[strip.(tax.County, [' ']) .== "Tompkins",:]
. Однако было бы довольно сложно вручную создавать подмножество данных для каждого округа таким образом. Есть ли более эффективный способ, с помощью которого я могу собрать все подмножества данных округа, чтобы я мог запустить на них свою линейную модель?
Ответ №1:
То, что вы ищете, это 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
s, чем string . Вы всегда можете использовать векторный Symbol.()
конструктор для преобразования любого столбца String
s.