Skip to content

Commit dd33222

Browse files
committed
Update all core functions to use optimized internals
1 parent 0b7a73d commit dd33222

32 files changed

+11252
-6011
lines changed

danfojs-node/dist/core/concat.js

Lines changed: 198 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,198 @@
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

Comments
 (0)