Skip to content

Commit c18ea63

Browse files
committed
add method to enable proper ordering
1 parent 6df08c8 commit c18ea63

1 file changed

Lines changed: 33 additions & 47 deletions

File tree

src/danfojs-base/aggregators/groupby.ts

Lines changed: 33 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -40,48 +40,6 @@ export default class Groupby {
4040

4141
}
4242

43-
group2(): Groupby{
44-
this.groupDict = this.data?.reduce((prev, current)=>{
45-
function dfs(arr: ArrayType1D, value: ArrayType1D, obj: any) {
46-
let firstIndex = arr[0]
47-
let remainingndex = arr.slice(1)
48-
49-
if(!remainingndex.length) {
50-
value.forEach((el, i) => {
51-
el = String(el)
52-
if (i == firstIndex) {
53-
if (el in Object.keys(obj)) {
54-
obj[el].push(value)
55-
} else {
56-
obj[el] = [value]
57-
}
58-
}
59-
});
60-
} else {
61-
value.forEach((el, i) => {
62-
if (i == firstIndex) {
63-
el = String(el)
64-
if (el as string in obj) {
65-
obj[el] = dfs(remainingndex, value, obj[el])
66-
}
67-
else {
68-
obj[el] = dfs(remainingndex, value, {})
69-
}
70-
}
71-
})
72-
}
73-
return obj
74-
}
75-
76-
prev = dfs(this.colIndex, current, prev)
77-
return prev
78-
79-
}, {})
80-
81-
delete this.data
82-
return this
83-
}
84-
8543
group(): Groupby{
8644
const self = this
8745
let keyToValue:{
@@ -306,7 +264,7 @@ export default class Groupby {
306264
toDataFrame(colDict: { [key: string ]: {} }): DataFrame {
307265
let data: { [key: string ]: ArrayType1D } = {}
308266

309-
for(let key of Object.keys(colDict)) {
267+
for(let key of this.colKeyDict(colDict)) {
310268
let value = colDict[key]
311269
let keyDict: { [key: string ]: ArrayType1D } = {}
312270
let oneValue = Object.values(value)[0] as ArrayType1D
@@ -398,8 +356,8 @@ export default class Groupby {
398356

399357
apply(callable: (x: DataFrame)=> DataFrame | Series ): DataFrame {
400358
let colDict: { [key: string ]: DataFrame | Series } = {}
401-
for(const [key, values] of Object.entries(this.colDict)) {
402-
let valDataframe = new DataFrame(values)
359+
for(const key of this.colKeyDict(this.colDict)) {
360+
let valDataframe = new DataFrame(this.colDict[key])
403361
colDict[key] = callable(valDataframe)
404362
}
405363
return this.concatGroups(colDict)
@@ -413,14 +371,22 @@ export default class Groupby {
413371
copyDf = values.copy()
414372
}
415373
else {
416-
copyDf = new DataFrame([values.values], {columns: ['applyops']})
374+
let columns = values.index as string[]
375+
columns = columns.length > 1 ? columns : ['applyOps']
376+
copyDf = new DataFrame([values.values], {columns: columns })
417377
}
418378
let len = copyDf.shape[0]
419379
for(let key1 in this.keyCol){
420380
let keyName = this.keyCol[key1] as string
421381
let keyValue = this.keyToValue[key][key1]
422382
let dfValue = Array(len).fill(keyValue)
423-
copyDf.addColumn(keyName, dfValue, {inplace: true})
383+
if (this.groupColNames) {
384+
copyDf.addColumn(keyName, dfValue, {inplace: true})
385+
}
386+
else {
387+
copyDf.addColumn(`${keyName}_Group`, dfValue, {inplace: true})
388+
}
389+
424390
}
425391
data.push(copyDf)
426392
}
@@ -453,4 +419,24 @@ export default class Groupby {
453419
return new Series([x.shape[0]])
454420
})
455421
}
422+
423+
private colKeyDict(colDict: { [key: string ]: {} }): string[]{
424+
let keyDict :{ [key: string ]: string[] } = {}
425+
426+
for(let key of Object.keys(colDict)) {
427+
let firstKey = key.split("-")[0]
428+
if (firstKey in keyDict) {
429+
keyDict[firstKey].push(key)
430+
}
431+
else {
432+
keyDict[firstKey] = [key]
433+
}
434+
}
435+
let keys = []
436+
for(let key of Object.keys(keyDict)) {
437+
keys.push(...keyDict[key])
438+
}
439+
return keys
440+
}
441+
456442
}

0 commit comments

Comments
 (0)