Skip to content

Commit a5a8711

Browse files
authored
Merge pull request #253 from opensource9ja/update-group-apply
Update group apply
2 parents d201f14 + b2ff126 commit a5a8711

File tree

4 files changed

+76
-26
lines changed

4 files changed

+76
-26
lines changed

danfojs-browser/src/core/groupby.js

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { DataFrame } from "./frame";
22
import { Utils } from "./utils";
33
import { Series } from "./series";
4+
import { concat } from "./concat";
45
const utils = new Utils;
56

67
/**
@@ -271,9 +272,15 @@ export class GroupBy {
271272
function concatPathAndNode(path, node, col_dtype) {
272273
if (Array.isArray(node)) {
273274
if (Array.isArray(node[0])) {
274-
const transposed_node = node[0].map((_, colIndex) => node.map((row) => row[colIndex]));
275-
for (const n_array of transposed_node)
276-
df_data.push(path.concat(n_array));
275+
if (ops != "apply" ) {
276+
const transposed_node = node[0].map((_, colIndex) => node.map((row) => row[colIndex]));
277+
for (const n_array of transposed_node)
278+
df_data.push(path.concat(n_array));
279+
} else {
280+
for (const n_array of node)
281+
df_data.push(path.concat(n_array));
282+
}
283+
277284
} else
278285
df_data.push(path.concat(node));
279286
} else {
@@ -314,13 +321,20 @@ export class GroupBy {
314321
function recursiveCount(sub_df_data, sub_count_group) {
315322
for (const [ key, value ] of Object.entries(sub_df_data)) {
316323
if (Array.isArray(value)) {
317-
sub_count_group[key] = value.map(( callable_value ) => {
318-
const callable_rslt = callable(callable_value);
319-
if ((callable_rslt instanceof DataFrame) || (callable_rslt instanceof Series))
320-
return callable_rslt.values;
321-
else
322-
return callable_rslt;
323-
});
324+
let callable_value;
325+
if (value.length > 1) {
326+
callable_value = concat({ df_list: value, axis: 1 });
327+
} else {
328+
callable_value = value[0];
329+
}
330+
const callable_rslt = callable(callable_value);
331+
if (callable_rslt instanceof DataFrame) {
332+
column = callable_rslt.columns;
333+
sub_count_group[key] = callable_rslt.values;
334+
} else if (callable_rslt instanceof Series) {
335+
sub_count_group[key] = callable_rslt.values;
336+
} else
337+
sub_count_group = callable_rslt;
324338
} else {
325339
sub_count_group[key] = {};
326340
recursiveCount(value, sub_count_group[key]);

danfojs-node/dist/core/groupby.js

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ var _utils = require("./utils");
1111

1212
var _series = require("./series");
1313

14+
var _concat = require("./concat");
15+
1416
const utils = new _utils.Utils();
1517

1618
class GroupBy {
@@ -229,9 +231,13 @@ class GroupBy {
229231
function concatPathAndNode(path, node, col_dtype) {
230232
if (Array.isArray(node)) {
231233
if (Array.isArray(node[0])) {
232-
const transposed_node = node[0].map((_, colIndex) => node.map(row => row[colIndex]));
234+
if (ops != "apply") {
235+
const transposed_node = node[0].map((_, colIndex) => node.map(row => row[colIndex]));
233236

234-
for (const n_array of transposed_node) df_data.push(path.concat(n_array));
237+
for (const n_array of transposed_node) df_data.push(path.concat(n_array));
238+
} else {
239+
for (const n_array of node) df_data.push(path.concat(n_array));
240+
}
235241
} else df_data.push(path.concat(node));
236242
} else {
237243
for (const [k, child] of Object.entries(node)) {
@@ -274,10 +280,25 @@ class GroupBy {
274280
function recursiveCount(sub_df_data, sub_count_group) {
275281
for (const [key, value] of Object.entries(sub_df_data)) {
276282
if (Array.isArray(value)) {
277-
sub_count_group[key] = value.map(callable_value => {
278-
const callable_rslt = callable(callable_value);
279-
if (callable_rslt instanceof _frame.DataFrame || callable_rslt instanceof _series.Series) return callable_rslt.values;else return callable_rslt;
280-
});
283+
let callable_value;
284+
285+
if (value.length > 1) {
286+
callable_value = (0, _concat.concat)({
287+
df_list: value,
288+
axis: 1
289+
});
290+
} else {
291+
callable_value = value[0];
292+
}
293+
294+
const callable_rslt = callable(callable_value);
295+
296+
if (callable_rslt instanceof _frame.DataFrame) {
297+
column = callable_rslt.columns;
298+
sub_count_group[key] = callable_rslt.values;
299+
} else if (callable_rslt instanceof _series.Series) {
300+
sub_count_group[key] = callable_rslt.values;
301+
} else sub_count_group = callable_rslt;
281302
} else {
282303
sub_count_group[key] = {};
283304
recursiveCount(value, sub_count_group[key]);

danfojs-node/src/core/groupby.js

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { DataFrame } from "./frame";
22
import { Utils } from "./utils";
33
import { Series } from "./series";
4+
import { concat } from "./concat";
45
const utils = new Utils;
56

67
/**
@@ -267,9 +268,15 @@ export class GroupBy {
267268
function concatPathAndNode(path, node, col_dtype) {
268269
if (Array.isArray(node)) {
269270
if (Array.isArray(node[0])) {
270-
const transposed_node = node[0].map((_, colIndex) => node.map((row) => row[colIndex]));
271-
for (const n_array of transposed_node)
272-
df_data.push(path.concat(n_array));
271+
if (ops != "apply" ) {
272+
const transposed_node = node[0].map((_, colIndex) => node.map((row) => row[colIndex]));
273+
for (const n_array of transposed_node)
274+
df_data.push(path.concat(n_array));
275+
} else {
276+
for (const n_array of node)
277+
df_data.push(path.concat(n_array));
278+
}
279+
273280
} else
274281
df_data.push(path.concat(node));
275282
} else {
@@ -310,13 +317,20 @@ export class GroupBy {
310317
function recursiveCount(sub_df_data, sub_count_group) {
311318
for (const [ key, value ] of Object.entries(sub_df_data)) {
312319
if (Array.isArray(value)) {
313-
sub_count_group[key] = value.map(( callable_value ) => {
314-
const callable_rslt = callable(callable_value);
315-
if ((callable_rslt instanceof DataFrame) || (callable_rslt instanceof Series))
316-
return callable_rslt.values;
317-
else
318-
return callable_rslt;
319-
});
320+
let callable_value;
321+
if (value.length > 1) {
322+
callable_value = concat({ df_list: value, axis: 1 });
323+
} else {
324+
callable_value = value[0];
325+
}
326+
const callable_rslt = callable(callable_value);
327+
if (callable_rslt instanceof DataFrame) {
328+
column = callable_rslt.columns;
329+
sub_count_group[key] = callable_rslt.values;
330+
} else if (callable_rslt instanceof Series) {
331+
sub_count_group[key] = callable_rslt.values;
332+
} else
333+
sub_count_group = callable_rslt;
320334
} else {
321335
sub_count_group[key] = {};
322336
recursiveCount(value, sub_count_group[key]);

danfojs-node/tests/core/groupby.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { assert } from "chai";
22
import { DataFrame } from '../../src/core/frame';
3+
import { Series } from '../../src/core/series';
34

45
describe("groupby", function () {
56
it("Check group by One column data", function () {

0 commit comments

Comments
 (0)