class Rover::Group
Public Class Methods
new(df, columns)
click to toggle source
# File lib/rover/group.rb, line 3 def initialize(df, columns) @df = df @columns = columns end
Public Instance Methods
group(*columns)
click to toggle source
# File lib/rover/group.rb, line 8 def group(*columns) Group.new(@df, @columns + columns.flatten) end
Private Instance Methods
grouped_dfs()
click to toggle source
TODO make more efficient
# File lib/rover/group.rb, line 28 def grouped_dfs # cache here so we can reuse for multiple calcuations if needed @grouped_dfs ||= begin raise ArgumentError, "No columns given" if @columns.empty? missing_keys = @columns - @df.keys raise ArgumentError, "Missing keys: #{missing_keys.join(", ")}" if missing_keys.any? groups = Hash.new { |hash, key| hash[key] = [] } i = 0 @df.each_row do |row| groups[row.slice(*@columns)] << i i += 1 end result = {} groups.keys.each do |k| result[k] = @df[groups[k]] end result end end