Class: CADataFrame::MergeFrame
- Inherits:
-
Object
- Object
- CADataFrame::MergeFrame
- Defined in:
- lib/carray-dataframe/join.rb
Defined Under Namespace
Classes: NilSorter
Instance Method Summary collapse
-
#initialize(left_df, right_df, opts = {}) ⇒ MergeFrame
constructor
rubocop:disable Metrics/AbcSize – quick-fix for issue #171.
- #join ⇒ Object
Constructor Details
#initialize(left_df, right_df, opts = {}) ⇒ MergeFrame
rubocop:disable Metrics/AbcSize – quick-fix for issue #171
50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/carray-dataframe/join.rb', line 50 def initialize left_df, right_df, opts={} # rubocop:disable Metrics/AbcSize -- quick-fix for issue #171 init_opts(opts) validate_on!(left_df, right_df) key_sanitizer = ->(h) { sanitize_merge_keys(h.values_at(*on)) } @left = df_to_a(left_df) @left.sort! { |a, b| safe_compare(a.values_at(*on), b.values_at(*on)) } @left_key_values = @left.map(&key_sanitizer) @right = df_to_a(right_df) @right.sort! { |a, b| safe_compare(a.values_at(*on), b.values_at(*on)) } @right_key_values = @right.map(&key_sanitizer) @left_keys, @right_keys = merge_keys(left_df, right_df, on) end |
Instance Method Details
#join ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/carray-dataframe/join.rb', line 63 def join res = [] until left.empty? && right.empty? lkey = first_left_key rkey = first_right_key row(lkey, rkey).tap { |r| res << r if r } end df = CADataFrame.new(res, order: dataframe_vector_names) if dataframe_vector_names.include?("index") df.set_index("index") else df end end |