Skip to content

Commit 7407331

Browse files
committed
update concat to accept both dataframe and series
1 parent a655247 commit 7407331

2 files changed

Lines changed: 114 additions & 6 deletions

File tree

danfojs/src/core/concat.js

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { DataFrame } from './frame'
22
// import { Series } from "../../src/core/series";
33
import { Utils } from "./utils"
4+
import { Series } from './series'
45

56
const utils = new Utils()
67

@@ -88,9 +89,19 @@ export class Concat {
8889
let val = values[index]
8990
if (typeof data[index] === "undefined") {
9091

91-
data[index] = val;
92+
if(Array.isArray(val)){
93+
data[index] = val
94+
}else{
95+
data[index] = [val];
96+
}
97+
9298
} else {
93-
data[index].push(...val);
99+
if(Array.isArray(val)){
100+
data[index].push(...val);
101+
}else{
102+
data[index].push(val);
103+
}
104+
94105
}
95106
}
96107

@@ -146,7 +157,6 @@ export class Concat {
146157
not_exist.push(col_name);
147158
}
148159
}
149-
150160
if (not_exist.length > 0) {
151161
for (let i = 0; i < value.length; i++) {
152162
let row_value = value[i]
@@ -160,7 +170,12 @@ export class Concat {
160170
new_arr[j] = NaN
161171
} else {
162172
let index = df_columns.indexOf(col_name)
163-
new_arr[j] = row_value[index]
173+
if(Array.isArray(row_value)){
174+
new_arr[j] = row_value[index]
175+
}else{
176+
new_arr[j] = row_value;
177+
}
178+
164179
}
165180

166181
}
@@ -171,9 +186,16 @@ export class Concat {
171186
}
172187

173188
}
189+
190+
if(Array.isArray(data[0])){
191+
let df = new DataFrame(data, { columns: columns });
192+
return df;
193+
}else{
194+
let sf = new Series(data)
195+
return sf
196+
}
174197

175-
let df = new DataFrame(data, { columns: columns });
176-
return df;
198+
177199

178200
}
179201
}

danfojs/tests/core/concat.js

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { assert } from "chai"
22
import { DataFrame } from '../../src/core/frame'
33
import {concat} from '../../src/core/concat'
4+
import { Series } from "../../src/core/series";
45

56

67

@@ -48,4 +49,89 @@ describe("Concatenate", function () {
4849
NaN, NaN, NaN]]
4950
assert.deepEqual(new_df.values, data_values);
5051
});
52+
53+
it("concatenate dataframe and series along 0 axis",function(){
54+
55+
let data1 = [1,2,3,4]
56+
let data2 = [3,4,5,6]
57+
58+
let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]
59+
let cols = ["A", "B", "C"]
60+
let df = new DataFrame(data, { columns: cols })
61+
62+
let s1 = new Series(data1)
63+
let s2 = new Series(data2)
64+
let rslt = [
65+
[ 1, 2, 3, NaN ],
66+
[ 4, 5, 6, NaN ],
67+
[ 20, 30, 40, NaN ],
68+
[ 39, 89, 78, NaN ],
69+
[ NaN, NaN, NaN, 1 ],
70+
[ NaN, NaN, NaN, 2 ],
71+
[ NaN, NaN, NaN, 3 ],
72+
[ NaN, NaN, NaN, 4 ]
73+
]
74+
75+
76+
let con = concat({ "df_list": [df,s1], "axis": 0 })
77+
78+
assert.deepEqual(con.values, rslt)
79+
80+
})
81+
82+
it("concatenate dataframe and series along axis 1",function(){
83+
84+
let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]
85+
let cols = ["A", "B", "C"]
86+
let df = new DataFrame(data, { columns: cols })
87+
88+
let data1 = [1,2,3,4]
89+
let s1 = new Series(data1)
90+
let rslt = [
91+
[ 1, 2, 3, 1 ],
92+
[ 4, 5, 6, 2 ],
93+
[ 20, 30, 40, 3 ],
94+
[ 39, 89, 78, 4 ]
95+
]
96+
97+
98+
let con = concat({ "df_list": [df,s1], "axis": 1 })
99+
100+
assert.deepEqual(con.values, rslt)
101+
102+
})
103+
it("concatenate series along axis 1",function(){
104+
105+
let data1 = [1,2,3,4]
106+
let data2 = [3,4,5,6]
107+
108+
let s1 = new Series(data1)
109+
let s2 = new Series(data2)
110+
let rslt = [ [ 1, 3 ], [ 2, 4 ], [ 3, 5 ], [ 4, 6 ] ]
111+
112+
113+
let con = concat({ "df_list": [s1,s2], "axis": 1 })
114+
115+
assert.deepEqual(con.values, rslt)
116+
117+
})
118+
it("concatenate series along axis 0",function(){
119+
120+
let data1 = [1,2,3,4]
121+
let data2 = [3,4,5,6]
122+
123+
let s1 = new Series(data1)
124+
let s2 = new Series(data2)
125+
let rslt = [
126+
1, 2, 3, 4,
127+
3, 4, 5, 6
128+
]
129+
130+
let con = concat({ "df_list": [s1,s2], "axis": 0 })
131+
132+
assert.deepEqual(con.values, rslt)
133+
134+
})
135+
136+
51137
});

0 commit comments

Comments
 (0)