@@ -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