Skip to content

Commit

Permalink
Merge pull request #48 from StratoDem/31-df-concat
Browse files Browse the repository at this point in the history
Add concat, transpose and append
  • Loading branch information
mjclawar authored Aug 11, 2017
2 parents 46a7294 + cfea0c6 commit d0949c0
Show file tree
Hide file tree
Showing 29 changed files with 1,274 additions and 284 deletions.
2 changes: 1 addition & 1 deletion .flowconfig
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[options]
unsafe.enable_getters_and_setters=true
suppress_comment=.*\\$FlowIssue
module.system.node.resolve_dirname=src
module.system.node.resolve_dirname=es6
module.system.node.resolve_dirname=node_modules

[ignore]
Expand Down
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# Change Log

0.2.0
### Added
- `concat` to concatenate multiple `DataFrame`s or `Series`
- `append` for `DataFrame`
- `transpose` for DataFrame`

0.1.28
### Added
- `rename` for `DataFrame` and `Series`
Expand Down
55 changes: 48 additions & 7 deletions dist/__tests__/core/frame.js
Original file line number Diff line number Diff line change
Expand Up @@ -978,13 +978,6 @@ describe('frame', function () {
});
});

describe('pivot_table', function () {
it('pivots', function () {
var df = new _frame2.default([{ a: 1, b: 1, c: 1, d: 3 }, { a: 1, b: 1, c: 2, d: 8 }, { a: 1, b: 2, c: 1, d: 9 }, { a: 1, b: 2, c: 2, d: 10 }, { a: 2, b: 1, c: 1, d: 1 }, { a: 2, b: 1, c: 2, d: 4 }, { a: 2, b: 2, c: 1, d: 1 }, { a: 2, b: 2, c: 2, d: 3 }, { a: 2, b: 2, c: 2, d: 3 }]);

console.log(df.pivot_table(['a', 'b'], 'c', 'd'));
});
});

describe('rename', function () {
it('renames one Series in the DataFrame', function () {
Expand Down Expand Up @@ -1013,4 +1006,52 @@ describe('frame', function () {
expect(df.length).toEqual(5);
});
});

describe('append', function () {
it('Appends a DataFrame to another when ignore_index is false', function () {
var df1 = new _frame2.default([{ x: 1, y: 2 }, { x: 2, y: 3 }, { x: 3, y: 4 }], { index: [1, 2, 3] });
var df2 = new _frame2.default([{ x: 2, y: 2 }, { x: 3, y: 3 }, { x: 4, y: 4 }], { index: [2, 3, 4] });

var df3 = df1.append(df2);
expect(df3.get('x').values.toArray()).toEqual([1, 2, 3, 2, 3, 4]);
expect(df3.get('y').values.toArray()).toEqual([2, 3, 4, 2, 3, 4]);
expect(df3.index.toArray()).toEqual([1, 2, 3, 2, 3, 4]);
});

it('Appends a DataFrame to another when ignore_index is true', function () {
var df1 = new _frame2.default([{ x: 1, y: 2 }, { x: 2, y: 3 }, { x: 3, y: 4 }], { index: [1, 2, 3] });
var df2 = new _frame2.default([{ x: 2, y: 2 }, { x: 3, y: 3 }, { x: 4, y: 4 }], { index: [2, 3, 4] });

var df3 = df1.append(df2, true);
expect(df3.get('x').values.toArray()).toEqual([1, 2, 3, 2, 3, 4]);
expect(df3.get('y').values.toArray()).toEqual([2, 3, 4, 2, 3, 4]);
expect(df3.index.toArray()).toEqual([0, 1, 2, 3, 4, 5]);
});

it('Appends an empty DataFrame to another', function () {
var df1 = new _frame2.default([{ x: 1, y: 2 }, { x: 2, y: 3 }, { x: 3, y: 4 }], { index: [1, 2, 3] });
var df2 = new _frame2.default([]);

var df3 = df1.append(df2);
expect(df3.get('x').values.toArray()).toEqual([1, 2, 3]);
expect(df3.get('y').values.toArray()).toEqual([2, 3, 4]);
expect(df3.index.toArray()).toEqual([1, 2, 3]);
});
});

describe('transpose', function () {
it('Tranposes a DataFrame by flipping indexes and columns', function () {
var df1 = new _frame2.default([{ x: 1, y: 2 }, { x: 2, y: 3 }, { x: 3, y: 4 }], { index: [1, 2, 3] });
var df2 = df1.transpose();

expect(df2.columns.toArray()).toEqual([1, 2, 3]);
expect(df2.index.toArray()).toEqual(['x', 'y']);
expect(df2.get(1).index.toArray()).toEqual(['x', 'y']);

var df3 = df2.transpose();
expect(df3.columns.toArray()).toEqual(['x', 'y']);
expect(df3.index.toArray()).toEqual([1, 2, 3]);
expect(df3.get('x').index.toArray()).toEqual([1, 2, 3]);
});
});
});
86 changes: 86 additions & 0 deletions dist/__tests__/core/reshape/concat.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
'use strict';

var _immutable = require('immutable');

var _immutable2 = _interopRequireDefault(_immutable);

var _frame = require('../../../core/frame');

var _frame2 = _interopRequireDefault(_frame);

var _series = require('../../../core/series');

var _series2 = _interopRequireDefault(_series);

var _concat = require('../../../core/reshape/concat');

var _concat2 = _interopRequireDefault(_concat);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

describe('concat', function () {
describe('concat Series', function () {
it('Concatenates two Series without ignoring index', function () {
var series1 = new _series2.default([1, 2, 3, 4]);
var series2 = new _series2.default([2, 3, 4, 5]);

var series3 = (0, _concat2.default)([series1, series2]);
expect(series3.values.toArray()).toEqual([1, 2, 3, 4, 2, 3, 4, 5]);
expect(series3.index.toArray()).toEqual([0, 1, 2, 3, 0, 1, 2, 3]);
});

it('Concatenates two Series with ignore index', function () {
var series1 = new _series2.default([1, 2, 3, 4]);
var series2 = new _series2.default([2, 3, 4, 5]);

var series3 = (0, _concat2.default)([series1, series2], { ignore_index: true });
expect(series3.values.toArray()).toEqual([1, 2, 3, 4, 2, 3, 4, 5]);
expect(series3.index.toArray()).toEqual([0, 1, 2, 3, 4, 5, 6, 7]);
});

it('Throws an error if the first object in concat is a Series ' + 'and any of the rest are not', function () {
var series1 = new _series2.default([1, 2, 3, 4]);
var series2 = new _series2.default([2, 3, 4, 5]);

expect(function () {
return (0, _concat2.default)([series1, series2, []], { ignore_index: true });
}).toThrow();
expect(function () {
return (0, _concat2.default)(_immutable2.default.List([series1, series2, []]), { ignore_index: true });
}).toThrow();
});
});

describe('concat DataFrame', function () {
it('Concatenates two DataFrames without ignoring index', function () {
var frame1 = new _frame2.default([{ x: 1, y: 2 }, { x: 2, y: 3 }, { x: 3, y: 4 }]);
var frame2 = new _frame2.default([{ x: 2, y: 3 }, { x: 3, y: 4 }, { x: 4, y: 5 }]);

var frame3 = (0, _concat2.default)([frame1, frame2]);
expect(frame3.get('x').values.toArray()).toEqual([1, 2, 3, 2, 3, 4]);
expect(frame3.get('x').index.toArray()).toEqual([0, 1, 2, 0, 1, 2]);
});

it('Concatenates two DataFrames with index ignored', function () {
var frame1 = new _frame2.default([{ x: 1, y: 2 }, { x: 2, y: 3 }, { x: 3, y: 4 }]);
var frame2 = new _frame2.default([{ x: 2, y: 3 }, { x: 3, y: 4 }, { x: 4, y: 5 }]);

var frame3 = (0, _concat2.default)([frame1, frame2], { ignore_index: true });
expect(frame3.get('x').values.toArray()).toEqual([1, 2, 3, 2, 3, 4]);
expect(frame3.get('x').index.toArray()).toEqual([0, 1, 2, 3, 4, 5]);
});

it('Concatenates two DataFrames along axis = 1 without ignoring index', function () {
var frame1 = new _frame2.default([{ x: 1, y: 2 }, { x: 2, y: 3 }, { x: 3, y: 4 }]);
var frame2 = new _frame2.default([{ x: 2, y: 3 }, { x: 3, y: 4 }, { x: 4, y: 5 }]);

var frame3 = (0, _concat2.default)([frame1, frame2], { axis: 1 });
expect(frame3.get('x').values.toArray()).toEqual([1, 2, 3]);
expect(frame3.get('y').values.toArray()).toEqual([2, 3, 4]);
expect(frame3.get('x.x').values.toArray()).toEqual([2, 3, 4]);
expect(frame3.get('x.x').name).toEqual('x.x');
expect(frame3.get('y.x').values.toArray()).toEqual([3, 4, 5]);
expect(frame3.get('y.x').name).toEqual('y.x');
});
});
});
18 changes: 18 additions & 0 deletions dist/__tests__/core/series.js
Original file line number Diff line number Diff line change
Expand Up @@ -658,4 +658,22 @@ describe('series', function () {
});
});
});

describe('append', function () {
it('Appends a Series to another when ignore_index is false', function () {
var ds1 = new _series2.default([1, 2, 3], { index: [1, 2, 3] });
var ds2 = new _series2.default([2, 3, 4], { index: [2, 3, 4] });
var ds3 = ds1.append(ds2);
expect(ds3.values.toArray()).toEqual([1, 2, 3, 2, 3, 4]);
expect(ds3.index.toArray()).toEqual([1, 2, 3, 2, 3, 4]);
});

it('Appends a Series to another when ignore_index is true', function () {
var ds1 = new _series2.default([1, 2, 3], { index: [1, 2, 3] });
var ds2 = new _series2.default([2, 3, 4], { index: [2, 3, 4] });
var ds3 = ds1.append(ds2, true);
expect(ds3.values.toArray()).toEqual([1, 2, 3, 2, 3, 4]);
expect(ds3.index.toArray()).toEqual([0, 1, 2, 3, 4, 5]);
});
});
});
Loading

0 comments on commit d0949c0

Please sign in to comment.