1+ "use strict" ;
2+
3+ var _interopRequireDefault = require ( "@babel/runtime/helpers/interopRequireDefault" ) ;
4+
5+ Object . defineProperty ( exports , "__esModule" , {
6+ value : true
7+ } ) ;
8+ exports . concat = exports . Concat = void 0 ;
9+
10+ var _frame = _interopRequireDefault ( require ( "./frame" ) ) ;
11+
12+ var _series = _interopRequireDefault ( require ( "./series" ) ) ;
13+
14+ class Concat {
15+ constructor ( kwargs ) {
16+ let df_list = null ;
17+ let axis = null ;
18+ let indexes = null ;
19+
20+ if ( Array . isArray ( kwargs [ "df_list" ] ) ) {
21+ df_list = kwargs [ "df_list" ] ;
22+ } else {
23+ throw new Error ( "df_list must be an Array of dataFrames/Series" ) ;
24+ }
25+
26+ if ( typeof kwargs [ "axis" ] === "number" ) {
27+ if ( kwargs [ "axis" ] == 0 || kwargs [ "axis" ] == 1 ) {
28+ axis = kwargs [ "axis" ] ;
29+ } else {
30+ axis = 1 ;
31+ }
32+ } else {
33+ throw new Error ( "axis must be a number" ) ;
34+ }
35+
36+ let df_object = Object . assign ( { } , df_list ) ;
37+
38+ if ( axis == 1 ) {
39+ let columns = [ ] ;
40+ let duplicate_col_count = { } ;
41+ let max_length = 0 ;
42+ let a_key = Object . keys ( df_object ) [ 0 ] ;
43+ indexes = df_object [ a_key ] . index ;
44+
45+ for ( let key in df_object ) {
46+ let column = df_object [ key ] . columns ;
47+ let length = df_object [ key ] . values . length ;
48+
49+ if ( length > max_length ) {
50+ max_length = length ;
51+ }
52+
53+ for ( let index in column ) {
54+ let col_name = column [ index ] ;
55+
56+ if ( col_name in duplicate_col_count ) {
57+ let count = duplicate_col_count [ col_name ] ;
58+ let name = `${ col_name } _${ count + 1 } ` ;
59+ columns . push ( name ) ;
60+ duplicate_col_count [ col_name ] = count + 1 ;
61+ } else {
62+ columns . push ( col_name ) ;
63+ duplicate_col_count [ col_name ] = 1 ;
64+ }
65+ }
66+ }
67+
68+ let data = new Array ( max_length ) ;
69+
70+ for ( let key in df_list ) {
71+ let values = df_list [ key ] . values ;
72+
73+ for ( let index = 0 ; index < values . length ; index ++ ) {
74+ let val = values [ index ] ;
75+
76+ if ( typeof data [ index ] === "undefined" ) {
77+ if ( Array . isArray ( val ) ) {
78+ data [ index ] = val ;
79+ } else {
80+ data [ index ] = [ val ] ;
81+ }
82+ } else {
83+ if ( Array . isArray ( val ) ) {
84+ data [ index ] . push ( ...val ) ;
85+ } else {
86+ data [ index ] . push ( val ) ;
87+ }
88+ }
89+ }
90+
91+ if ( values . length < max_length ) {
92+ let column_length = df_list [ key ] . columns . length ;
93+ let null_array = Array ( column_length ) ;
94+
95+ for ( let col = 0 ; col < column_length ; col ++ ) {
96+ null_array [ col ] = NaN ;
97+ }
98+
99+ if ( typeof data [ max_length - 1 ] === "undefined" ) {
100+ data [ max_length - 1 ] = null_array ;
101+ } else {
102+ data [ max_length - 1 ] . push ( ...null_array ) ;
103+ }
104+ }
105+ }
106+
107+ let df = new _frame . default ( data , {
108+ columns : columns ,
109+ index : indexes
110+ } ) ;
111+ return df ;
112+ } else {
113+ let columns = [ ] ;
114+ let row_indexes = [ ] ;
115+ let col_i = 0 ;
116+
117+ for ( let key in df_list ) {
118+ let column = df_list [ key ] . columns ;
119+ columns . push ( ...column ) ;
120+ indexes = df_list [ key ] . index ;
121+ let r_index = indexes . map ( val => {
122+ return `${ val } _row${ col_i } ` ;
123+ } ) ;
124+ row_indexes . push ( ...r_index ) ;
125+ col_i += 1 ;
126+ }
127+
128+ let column_set = new Set ( columns ) ;
129+ columns = Array . from ( column_set ) ;
130+ let data = [ ] ;
131+
132+ for ( let key in df_list ) {
133+ let value = df_list [ key ] . values ;
134+ let df_columns = df_list [ key ] . columns ;
135+ let not_exist = [ ] ;
136+
137+ for ( let col_index in columns ) {
138+ let col_name = columns [ col_index ] ;
139+ let is_index = df_columns . indexOf ( col_name ) ;
140+
141+ if ( is_index == - 1 ) {
142+ not_exist . push ( col_name ) ;
143+ }
144+ }
145+
146+ if ( not_exist . length > 0 ) {
147+ for ( let i = 0 ; i < value . length ; i ++ ) {
148+ let row_value = value [ i ] ;
149+ let new_arr = Array ( columns . length ) ;
150+
151+ for ( let j = 0 ; j < columns . length ; j ++ ) {
152+ let col_name = columns [ j ] ;
153+
154+ if ( not_exist . includes ( col_name ) ) {
155+ new_arr [ j ] = NaN ;
156+ } else {
157+ let index = df_columns . indexOf ( col_name ) ;
158+
159+ if ( Array . isArray ( row_value ) ) {
160+ new_arr [ j ] = row_value [ index ] ;
161+ } else {
162+ new_arr [ j ] = row_value ;
163+ }
164+ }
165+ }
166+
167+ data . push ( new_arr ) ;
168+ }
169+ } else {
170+ data . push ( ...value ) ;
171+ }
172+ }
173+
174+ if ( Array . isArray ( data [ 0 ] ) ) {
175+ let df = new _frame . default ( data , {
176+ columns : columns ,
177+ index : row_indexes
178+ } ) ;
179+ return df ;
180+ } else {
181+ let sf = new _series . default ( data , {
182+ index : row_indexes
183+ } ) ;
184+ return sf ;
185+ }
186+ }
187+ }
188+
189+ }
190+
191+ exports . Concat = Concat ;
192+
193+ const concat = kwargs => {
194+ let concat_sf = new Concat ( kwargs ) ;
195+ return concat_sf ;
196+ } ;
197+
198+ exports . concat = concat ;
0 commit comments