Как эффективно захватывать данные на основе строкового значения строки

#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  │
├─────┼─────────┼───────┼──────────┤
│ 1A20140.913118 │
│ 2A20180.917585 │
│ 3A20110.45841  │

julia> dfg[2]
2×3 SubDataFrame
│ Row │ Country │ year  │ tax      │
│     │ Symbol  │ Int64 │ Float64  │
├─────┼─────────┼───────┼──────────┤
│ 1   │ C       │ 20030.894182 │
│ 2   │ C       │ 20110.869531 │

julia> dfg[3]
2×3 SubDataFrame
│ Row │ Country │ year  │ tax      │
│     │ Symbol  │ Int64 │ Float64  │
├─────┼─────────┼───────┼──────────┤
│ 1B20010.808954 │
│ 2B20080.969813 

Обратите внимание, что для более быстрого поиска лучше использовать Symbol s, чем string . Вы всегда можете использовать векторный Symbol.() конструктор для преобразования любого столбца String s.