Skip to content

Commit a998287

Browse files
committed
Merge branch 'danfo/typescript' of https://github.com/javascriptdata/danfojs into danfo/typescript
2 parents e88c12e + c07f100 commit a998287

3 files changed

Lines changed: 22 additions & 6 deletions

File tree

src/danfojs-base/core/frame.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1324,14 +1324,15 @@ export default class DataFrame extends NDframe implements DataFrameInterface {
13241324
addColumn(
13251325
column: string,
13261326
values: Series | ArrayType1D,
1327-
options?: { inplace?: boolean }
1327+
options?: { inplace?: boolean, atIndex?: number }
13281328
): DataFrame
13291329
addColumn(
13301330
column: string,
13311331
values: Series | ArrayType1D,
1332-
options?: { inplace?: boolean }
1332+
options?: { inplace?: boolean, atIndex?: number }
13331333
): DataFrame | void {
13341334
const { inplace } = { inplace: false, ...options };
1335+
const atIndex = typeof options?.atIndex !== "undefined" ? options.atIndex : this.columns.length
13351336

13361337
if (!column) {
13371338
throw new Error("ParamError: column must be specified")
@@ -1362,19 +1363,24 @@ export default class DataFrame extends NDframe implements DataFrameInterface {
13621363
const oldValues = this.$data
13631364
for (let i = 0; i < oldValues.length; i++) {
13641365
const innerArr = [...oldValues[i]] as ArrayType1D
1365-
innerArr.push(colunmValuesToAdd[i])
1366+
innerArr.splice(atIndex, 0, colunmValuesToAdd[i])
13661367
newData.push(innerArr)
13671368
}
13681369

13691370
if (inplace) {
13701371
this.$setValues(newData, true, false)
1371-
this.$setColumnNames([...this.columns, column]);
1372+
let columns = [...this.columns]
1373+
columns.splice(atIndex, 0, column)
1374+
this.$setColumnNames(columns)
13721375
this.$setInternalColumnDataProperty(column);
13731376

13741377
} else {
1378+
let columns = [...this.columns]
1379+
columns.splice(atIndex, 0, column)
1380+
13751381
const df = new DataFrame(newData, {
13761382
index: [...this.index],
1377-
columns: [...this.columns, column],
1383+
columns: columns,
13781384
dtypes: [...this.dtypes, utils.inferDtype(colunmValuesToAdd)[0]],
13791385
config: { ...this.$config }
13801386
})

src/danfojs-base/shared/types.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,8 @@ export interface DataFrameInterface extends NDframeInterface {
246246
column: string,
247247
values: Series | ArrayType1D,
248248
options?: {
249-
inplace?: boolean
249+
inplace?: boolean,
250+
atIndex?: number
250251
}
251252
): DataFrame | void
252253
groupby(column: [string, string]): any //Update to GroupBy class later

src/danfojs-node/test/core/frame.test.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,15 @@ describe("DataFrame", function () {
144144
assert.deepEqual(df["val_count"].values, [1, 2, 3, 4]);
145145
assert.deepEqual(df["val_sum"].values, [20.3, 30.456, 40.90, 90.1]);
146146
});
147+
it("Add new array values to DataFrame works", function () {
148+
let data = { alpha: ["A", "B", "C", "D"], val_count: [1, 2, 3, 4], val_sum: [20.3, 30.456, 40.90, 90.1] };
149+
let df = new DataFrame(data);
150+
const newdf = df.addColumn("new_column", ["a", "b", "c", "d"], {atIndex: 0}) as DataFrame;
151+
assert.deepEqual(newdf["new_column"].values, ["a", "b", "c", "d"]);
152+
assert.deepEqual(newdf.columns, ["new_column", "alpha", "val_count", "val_sum"]);
153+
assert.deepEqual(newdf.dtypes, ["string", "int32", "float32", "string"]);
154+
assert.deepEqual(newdf.index, [0, 1, 2, 3]);
155+
});
147156
})
148157

149158
describe("drop", function () {

0 commit comments

Comments
 (0)