Module: DaruLite::DataFrame::Indexable
- Included in:
- DaruLite::DataFrame
- Defined in:
- lib/daru_lite/data_frame/indexable.rb
Defined Under Namespace
Modules: SetCategoricalIndexStrategy, SetMultiIndexStrategy, SetSingleIndexStrategy
Instance Method Summary collapse
-
#index=(idx) ⇒ Object
Reassign index with a new index of type DaruLite::Index or any of its subclasses.
-
#reindex(new_index) ⇒ Object
Change the index of the DataFrame and preserve the labels of the previous indexing.
- #reindex_vectors(new_vectors) ⇒ Object
- #reset_index ⇒ Object
-
#set_index(new_index_col, keep: false, categorical: false) ⇒ Object
Set a particular column as the new DF.
-
#vectors=(new_index) ⇒ Object
Reassign vectors with a new index of type DaruLite::Index or any of its subclasses.
Instance Method Details
#index=(idx) ⇒ Object
Reassign index with a new index of type DaruLite::Index or any of its subclasses.
123 124 125 126 127 128 |
# File 'lib/daru_lite/data_frame/indexable.rb', line 123 def index=(idx) @index = Index.coerce idx @data.each { |vec| vec.index = @index } self end |
#reindex(new_index) ⇒ Object
Change the index of the DataFrame and preserve the labels of the previous indexing. New index can be DaruLite::Index or any of its subclasses.
87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/daru_lite/data_frame/indexable.rb', line 87 def reindex(new_index) unless new_index.is_a?(DaruLite::Index) raise ArgumentError, 'Must pass the new index of type Index or its ' \ "subclasses, not #{new_index.class}" end cl = DaruLite::DataFrame.new({}, order: @vectors, index: new_index, name: @name) new_index.each_with_object(cl) do |idx, memo| memo.row[idx] = @index.include?(idx) ? row[idx] : Array.new(ncols) end end |
#reindex_vectors(new_vectors) ⇒ Object
130 131 132 133 134 135 136 137 138 139 140 |
# File 'lib/daru_lite/data_frame/indexable.rb', line 130 def reindex_vectors(new_vectors) unless new_vectors.is_a?(DaruLite::Index) raise ArgumentError, 'Must pass the new index of type Index or its ' \ "subclasses, not #{new_vectors.class}" end cl = DaruLite::DataFrame.new({}, order: new_vectors, index: @index, name: @name) new_vectors.each_with_object(cl) do |vec, memo| memo[vec] = @vectors.include?(vec) ? self[vec] : Array.new(nrows) end end |
#reset_index ⇒ Object
99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/daru_lite/data_frame/indexable.rb', line 99 def reset_index index_df = index.to_df names = index.name names = [names] unless names.instance_of?(Array) new_vectors = names + vectors.to_a self.index = index_df.index names.each do |name| self[name] = index_df[name] end self.order = new_vectors self end |
#set_index(new_index_col, keep: false, categorical: false) ⇒ Object
Set a particular column as the new DF
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/daru_lite/data_frame/indexable.rb', line 45 def set_index(new_index_col, keep: false, categorical: false) if categorical strategy = SetCategoricalIndexStrategy elsif new_index_col.respond_to?(:to_a) strategy = SetMultiIndexStrategy new_index_col = new_index_col.to_a else strategy = SetSingleIndexStrategy end unless categorical uniq_size = strategy.uniq_size(self, new_index_col) raise ArgumentError, 'All elements in new index must be unique.' if @size != uniq_size end self.index = strategy.new_index(self, new_index_col) strategy.delete_vector(self, new_index_col) unless keep self end |
#vectors=(new_index) ⇒ Object
Reassign vectors with a new index of type DaruLite::Index or any of its subclasses.
152 153 154 155 156 157 158 159 160 161 162 163 164 165 |
# File 'lib/daru_lite/data_frame/indexable.rb', line 152 def vectors=(new_index) raise ArgumentError, 'Can only reindex with Index and its subclasses' unless new_index.is_a?(DaruLite::Index) if new_index.size != ncols raise ArgumentError, "Specified index length #{new_index.size} not equal to" \ "dataframe size #{ncols}" end @vectors = new_index @data.zip(new_index.to_a).each do |vect, name| vect.name = name end self end |