Skip to content

Commit 51821fb

Browse files
committed
2 parents 1eeb39f + 6364063 commit 51821fb

5 files changed

Lines changed: 83 additions & 33 deletions

File tree

danfojs/src/core/frame.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1092,7 +1092,7 @@ export class DataFrame extends Ndframe {
10921092
*/
10931093
groupby(col) {
10941094

1095-
let len = this.shape[0] - 1
1095+
let len = this.shape[0]
10961096

10971097
let column_names = this.column_names
10981098
let col_dict = {};

danfojs/src/core/indexing.js

Lines changed: 31 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,14 @@ export const indexLoc = (ndframe, kwargs) => {
3232
}
3333

3434
if (isNaN(Number(row_split[1]))) {
35-
end = ndframe.index.lastIndexOf(row_split[1]) || (ndframe.values.length - 1);
35+
end = ndframe.index.lastIndexOf(row_split[1])-1 || (ndframe.values.length - 1);
3636
} else {
37-
end = Number(row_split[1]) || (ndframe.values.length - 1);
37+
end = Number(row_split[1])-1 || (ndframe.values.length - 1);
3838
}
3939
rows = utils.__range(start, end);
4040
} else {
4141
let start = parseInt(row_split[0]) || 0;
42-
let end = parseInt(row_split[1]) || (ndframe.values.length - 1);
42+
let end = parseInt(row_split[1]) - 1 || (ndframe.values.length - 1);
4343

4444
if (typeof start == "number" && typeof end == "number") {
4545
rows = utils.__range(start, end);
@@ -95,11 +95,11 @@ export const indexLoc = (ndframe, kwargs) => {
9595

9696
if (kwargs["type"] == "iloc" || (row_split[0] == "")) {
9797
start = parseInt(row_split[0]) || 0;
98-
end = parseInt(row_split[1]) || (ndframe.values[0].length - 1);
98+
end = parseInt(row_split[1]) -1 || (ndframe.values[0].length - 1);
9999
} else {
100100

101101
start = parseInt(ndframe.columns.indexOf(row_split[0]));
102-
end = parseInt(ndframe.columns.indexOf(row_split[1]));
102+
end = parseInt(ndframe.columns.indexOf(row_split[1]))-1;
103103
}
104104

105105

@@ -136,31 +136,39 @@ export const indexLoc = (ndframe, kwargs) => {
136136
throw new Error(`Specified row index ${row_val} is bigger than maximum row index of ${max_rowIndex}`);
137137
}
138138

139-
let value = data_values[row_val]
140-
let row_data = []
139+
if(Array.isArray(data_values[0])){
141140

142-
for (var i in columns) {
143-
var col_index;
144-
if (kwargs["type"] == "loc" && !isColumnSplit) {
145-
col_index = ndframe.columns.indexOf(columns[i]); //obtain the column index
141+
let value = data_values[row_val]
142+
let row_data = []
146143

147-
if (col_index == -1) {
148-
throw new Error(`Column ${columns[i]} does not exist`);
149-
}
150-
} else {
151-
col_index = columns[i];
152-
let max_colIndex = ndframe.columns.length - 1; //assign the maximum column index to a value
153144

154-
if (col_index > max_colIndex) {
155-
throw new Error(`column index ${col_index} is bigger than ${max_colIndex}`);
145+
for (var i in columns) {
146+
var col_index;
147+
if (kwargs["type"] == "loc" && !isColumnSplit) {
148+
col_index = ndframe.columns.indexOf(columns[i]); //obtain the column index
149+
150+
if (col_index == -1) {
151+
throw new Error(`Column ${columns[i]} does not exist`);
152+
}
153+
} else {
154+
col_index = columns[i];
155+
let max_colIndex = ndframe.columns.length - 1; //assign the maximum column index to a value
156+
157+
if (col_index > max_colIndex) {
158+
throw new Error(`column index ${col_index} is bigger than ${max_colIndex}`);
159+
}
156160
}
161+
162+
let elem = value[col_index]; //obtain the element at the column index
163+
row_data.push(elem);
157164
}
158165

159-
let elem = value[col_index]; //obtain the element at the column index
160-
row_data.push(elem);
161-
}
166+
new_data.push(row_data); //store the data for each row in the new_data
162167

163-
new_data.push(row_data); //store the data for each row in the new_data
168+
}else{
169+
170+
new_data.push(data_values[row_val])
171+
}
164172

165173
}
166174

danfojs/src/core/series.js

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { table } from 'table'
88
import { Configs } from '../config/config'
99
import { TimeSeries } from './timeseries';
1010
import { Plot } from '../plotting/plot'
11-
11+
import { indexLoc } from '../core/indexing'
1212

1313

1414
const utils = new Utils()
@@ -1307,5 +1307,24 @@ export class Series extends NDframe {
13071307
return plt
13081308
}
13091309

1310+
/**
1311+
* Slice series accross the index
1312+
* @param {*} row --> Array
1313+
* @returns Series
1314+
*/
1315+
iloc(row){
1316+
1317+
let kwargs = {}
1318+
1319+
kwargs["rows"] = row
1320+
kwargs["type"] = "iloc"
1321+
1322+
let [new_data, columns, rows] = indexLoc(this, kwargs);
1323+
1324+
let sf = new Series(new_data, {columns: columns});
1325+
sf.__set_index(rows)
1326+
1327+
return sf
1328+
}
13101329
}
13111330

danfojs/tests/core/frame.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ describe("DataFrame", function () {
191191
let df = new DataFrame(data, { columns: cols })
192192

193193
let col_df = df.loc({ "rows": ["0:2"], "columns": ["B:C"] })
194-
let col_data = [[2, 3], [5, 6], [30, 40]]
194+
let col_data = [[2], [5]]
195195

196196
assert.deepEqual(col_df.values, col_data)
197197

@@ -202,7 +202,7 @@ describe("DataFrame", function () {
202202
let df = new DataFrame(data, { columns: cols })
203203

204204
let col_df = df.loc({ "rows": ["0:2"], "columns": ["B", "C"] })
205-
let col_data = [[2, 3], [5, 6], [30, 40]]
205+
let col_data = [[2, 3], [5, 6]]
206206

207207
assert.deepEqual(col_df.values, col_data)
208208

@@ -213,7 +213,7 @@ describe("DataFrame", function () {
213213
let df = new DataFrame(data, { columns: cols })
214214

215215
let col_df = df.loc({ "rows": [0, 1], "columns": ["A:C"] })
216-
let col_data = [[1, 2, 3], [4, 5, 6]]
216+
let col_data = [[1, 2], [4, 5]]
217217
assert.deepEqual(col_df.values, col_data)
218218

219219
})
@@ -255,7 +255,7 @@ describe("DataFrame", function () {
255255
let df = new DataFrame(data)
256256
df.set_index({ key: ["a", "b", "c", "d"], inplace: true })
257257
let sub_df = df.loc({ rows: ["a:c"], columns: ["Name", "Count"] })
258-
let expected = [["Apples", 21], ["Mango", 5], ["Banana", 30]]
258+
let expected = [["Apples", 21], ["Mango", 5]]
259259
assert.deepEqual(sub_df.values, expected)
260260

261261
})
@@ -321,7 +321,7 @@ describe("DataFrame", function () {
321321
let df = new DataFrame(data, { columns: cols })
322322

323323
let col_df = df.iloc({ "rows": ["0:2"], "columns": ["1:2"] })
324-
let col_data = [[2, 3], [5, 6], [30, 40]]
324+
let col_data = [[2], [5]]
325325

326326
assert.deepEqual(col_df.values, col_data)
327327

@@ -332,7 +332,7 @@ describe("DataFrame", function () {
332332
let df = new DataFrame(data, { columns: cols })
333333

334334
let col_df = df.iloc({ "rows": ["0:2"], "columns": [1, 2] })
335-
let col_data = [[2, 3], [5, 6], [30, 40]]
335+
let col_data = [[2, 3], [5, 6]]
336336

337337
assert.deepEqual(col_df.values, col_data)
338338

@@ -343,7 +343,7 @@ describe("DataFrame", function () {
343343
let df = new DataFrame(data, { columns: cols })
344344

345345
let col_df = df.iloc({ "rows": [0, 1, 2], "columns": ["1:2"] })
346-
let col_data = [[2, 3], [5, 6], [30, 40]]
346+
let col_data = [[2], [5], [30]]
347347
assert.deepEqual(col_df.values, col_data)
348348

349349
})
@@ -363,7 +363,7 @@ describe("DataFrame", function () {
363363
let df = new DataFrame(data, { columns: cols })
364364

365365
let col_df = df.iloc({ "columns": ["1:2"] })
366-
let col_data = [[2, 3], [5, 6], [30, 40], [89, 78]]
366+
let col_data = [[2], [5], [30], [89]]
367367
assert.deepEqual(col_df.values, col_data)
368368

369369
})

danfojs/tests/core/series.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1148,4 +1148,27 @@ describe("Series", function () {
11481148

11491149

11501150
})
1151+
1152+
describe("iloc", function(){
1153+
1154+
it("indexing by list of index",function(){
1155+
let data = [1,2,3,4,"a","b","c"]
1156+
let sf = new Series(data)
1157+
1158+
let expected_val = [ 2, 'a', 3, 4, 'b' ]
1159+
1160+
assert.deepEqual(sf.iloc([1,4,2,3,5]).values, expected_val)
1161+
1162+
});
1163+
it("indexing by slicing", function(){
1164+
1165+
let data = [1,2,3,4,"a","b","c"]
1166+
let sf = new Series(data)
1167+
1168+
let expected_val = [ 2, 3, 4 ]
1169+
1170+
assert.deepEqual(sf.iloc(["1:4"]).values, expected_val)
1171+
1172+
});
1173+
});
11511174
})

0 commit comments

Comments
 (0)