Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add concat, transpose and append #48

Merged
merged 7 commits into from
Aug 11, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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