Skip to content

Commit d0949c0

Browse files
authored
Merge pull request #48 from StratoDem/31-df-concat
Add concat, transpose and append
2 parents 46a7294 + cfea0c6 commit d0949c0

29 files changed

+1274
-284
lines changed

.flowconfig

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[options]
22
unsafe.enable_getters_and_setters=true
33
suppress_comment=.*\\$FlowIssue
4-
module.system.node.resolve_dirname=src
4+
module.system.node.resolve_dirname=es6
55
module.system.node.resolve_dirname=node_modules
66

77
[ignore]

CHANGELOG.md

+6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Change Log
22

3+
0.2.0
4+
### Added
5+
- `concat` to concatenate multiple `DataFrame`s or `Series`
6+
- `append` for `DataFrame`
7+
- `transpose` for DataFrame`
8+
39
0.1.28
410
### Added
511
- `rename` for `DataFrame` and `Series`

dist/__tests__/core/frame.js

+48-7
Original file line numberDiff line numberDiff line change
@@ -978,13 +978,6 @@ describe('frame', function () {
978978
});
979979
});
980980

981-
describe('pivot_table', function () {
982-
it('pivots', function () {
983-
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 }]);
984-
985-
console.log(df.pivot_table(['a', 'b'], 'c', 'd'));
986-
});
987-
});
988981

989982
describe('rename', function () {
990983
it('renames one Series in the DataFrame', function () {
@@ -1013,4 +1006,52 @@ describe('frame', function () {
10131006
expect(df.length).toEqual(5);
10141007
});
10151008
});
1009+
1010+
describe('append', function () {
1011+
it('Appends a DataFrame to another when ignore_index is false', function () {
1012+
var df1 = new _frame2.default([{ x: 1, y: 2 }, { x: 2, y: 3 }, { x: 3, y: 4 }], { index: [1, 2, 3] });
1013+
var df2 = new _frame2.default([{ x: 2, y: 2 }, { x: 3, y: 3 }, { x: 4, y: 4 }], { index: [2, 3, 4] });
1014+
1015+
var df3 = df1.append(df2);
1016+
expect(df3.get('x').values.toArray()).toEqual([1, 2, 3, 2, 3, 4]);
1017+
expect(df3.get('y').values.toArray()).toEqual([2, 3, 4, 2, 3, 4]);
1018+
expect(df3.index.toArray()).toEqual([1, 2, 3, 2, 3, 4]);
1019+
});
1020+
1021+
it('Appends a DataFrame to another when ignore_index is true', function () {
1022+
var df1 = new _frame2.default([{ x: 1, y: 2 }, { x: 2, y: 3 }, { x: 3, y: 4 }], { index: [1, 2, 3] });
1023+
var df2 = new _frame2.default([{ x: 2, y: 2 }, { x: 3, y: 3 }, { x: 4, y: 4 }], { index: [2, 3, 4] });
1024+
1025+
var df3 = df1.append(df2, true);
1026+
expect(df3.get('x').values.toArray()).toEqual([1, 2, 3, 2, 3, 4]);
1027+
expect(df3.get('y').values.toArray()).toEqual([2, 3, 4, 2, 3, 4]);
1028+
expect(df3.index.toArray()).toEqual([0, 1, 2, 3, 4, 5]);
1029+
});
1030+
1031+
it('Appends an empty DataFrame to another', function () {
1032+
var df1 = new _frame2.default([{ x: 1, y: 2 }, { x: 2, y: 3 }, { x: 3, y: 4 }], { index: [1, 2, 3] });
1033+
var df2 = new _frame2.default([]);
1034+
1035+
var df3 = df1.append(df2);
1036+
expect(df3.get('x').values.toArray()).toEqual([1, 2, 3]);
1037+
expect(df3.get('y').values.toArray()).toEqual([2, 3, 4]);
1038+
expect(df3.index.toArray()).toEqual([1, 2, 3]);
1039+
});
1040+
});
1041+
1042+
describe('transpose', function () {
1043+
it('Tranposes a DataFrame by flipping indexes and columns', function () {
1044+
var df1 = new _frame2.default([{ x: 1, y: 2 }, { x: 2, y: 3 }, { x: 3, y: 4 }], { index: [1, 2, 3] });
1045+
var df2 = df1.transpose();
1046+
1047+
expect(df2.columns.toArray()).toEqual([1, 2, 3]);
1048+
expect(df2.index.toArray()).toEqual(['x', 'y']);
1049+
expect(df2.get(1).index.toArray()).toEqual(['x', 'y']);
1050+
1051+
var df3 = df2.transpose();
1052+
expect(df3.columns.toArray()).toEqual(['x', 'y']);
1053+
expect(df3.index.toArray()).toEqual([1, 2, 3]);
1054+
expect(df3.get('x').index.toArray()).toEqual([1, 2, 3]);
1055+
});
1056+
});
10161057
});

dist/__tests__/core/reshape/concat.js

+86
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
'use strict';
2+
3+
var _immutable = require('immutable');
4+
5+
var _immutable2 = _interopRequireDefault(_immutable);
6+
7+
var _frame = require('../../../core/frame');
8+
9+
var _frame2 = _interopRequireDefault(_frame);
10+
11+
var _series = require('../../../core/series');
12+
13+
var _series2 = _interopRequireDefault(_series);
14+
15+
var _concat = require('../../../core/reshape/concat');
16+
17+
var _concat2 = _interopRequireDefault(_concat);
18+
19+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20+
21+
describe('concat', function () {
22+
describe('concat Series', function () {
23+
it('Concatenates two Series without ignoring index', function () {
24+
var series1 = new _series2.default([1, 2, 3, 4]);
25+
var series2 = new _series2.default([2, 3, 4, 5]);
26+
27+
var series3 = (0, _concat2.default)([series1, series2]);
28+
expect(series3.values.toArray()).toEqual([1, 2, 3, 4, 2, 3, 4, 5]);
29+
expect(series3.index.toArray()).toEqual([0, 1, 2, 3, 0, 1, 2, 3]);
30+
});
31+
32+
it('Concatenates two Series with ignore index', function () {
33+
var series1 = new _series2.default([1, 2, 3, 4]);
34+
var series2 = new _series2.default([2, 3, 4, 5]);
35+
36+
var series3 = (0, _concat2.default)([series1, series2], { ignore_index: true });
37+
expect(series3.values.toArray()).toEqual([1, 2, 3, 4, 2, 3, 4, 5]);
38+
expect(series3.index.toArray()).toEqual([0, 1, 2, 3, 4, 5, 6, 7]);
39+
});
40+
41+
it('Throws an error if the first object in concat is a Series ' + 'and any of the rest are not', function () {
42+
var series1 = new _series2.default([1, 2, 3, 4]);
43+
var series2 = new _series2.default([2, 3, 4, 5]);
44+
45+
expect(function () {
46+
return (0, _concat2.default)([series1, series2, []], { ignore_index: true });
47+
}).toThrow();
48+
expect(function () {
49+
return (0, _concat2.default)(_immutable2.default.List([series1, series2, []]), { ignore_index: true });
50+
}).toThrow();
51+
});
52+
});
53+
54+
describe('concat DataFrame', function () {
55+
it('Concatenates two DataFrames without ignoring index', function () {
56+
var frame1 = new _frame2.default([{ x: 1, y: 2 }, { x: 2, y: 3 }, { x: 3, y: 4 }]);
57+
var frame2 = new _frame2.default([{ x: 2, y: 3 }, { x: 3, y: 4 }, { x: 4, y: 5 }]);
58+
59+
var frame3 = (0, _concat2.default)([frame1, frame2]);
60+
expect(frame3.get('x').values.toArray()).toEqual([1, 2, 3, 2, 3, 4]);
61+
expect(frame3.get('x').index.toArray()).toEqual([0, 1, 2, 0, 1, 2]);
62+
});
63+
64+
it('Concatenates two DataFrames with index ignored', function () {
65+
var frame1 = new _frame2.default([{ x: 1, y: 2 }, { x: 2, y: 3 }, { x: 3, y: 4 }]);
66+
var frame2 = new _frame2.default([{ x: 2, y: 3 }, { x: 3, y: 4 }, { x: 4, y: 5 }]);
67+
68+
var frame3 = (0, _concat2.default)([frame1, frame2], { ignore_index: true });
69+
expect(frame3.get('x').values.toArray()).toEqual([1, 2, 3, 2, 3, 4]);
70+
expect(frame3.get('x').index.toArray()).toEqual([0, 1, 2, 3, 4, 5]);
71+
});
72+
73+
it('Concatenates two DataFrames along axis = 1 without ignoring index', function () {
74+
var frame1 = new _frame2.default([{ x: 1, y: 2 }, { x: 2, y: 3 }, { x: 3, y: 4 }]);
75+
var frame2 = new _frame2.default([{ x: 2, y: 3 }, { x: 3, y: 4 }, { x: 4, y: 5 }]);
76+
77+
var frame3 = (0, _concat2.default)([frame1, frame2], { axis: 1 });
78+
expect(frame3.get('x').values.toArray()).toEqual([1, 2, 3]);
79+
expect(frame3.get('y').values.toArray()).toEqual([2, 3, 4]);
80+
expect(frame3.get('x.x').values.toArray()).toEqual([2, 3, 4]);
81+
expect(frame3.get('x.x').name).toEqual('x.x');
82+
expect(frame3.get('y.x').values.toArray()).toEqual([3, 4, 5]);
83+
expect(frame3.get('y.x').name).toEqual('y.x');
84+
});
85+
});
86+
});

dist/__tests__/core/series.js

+18
Original file line numberDiff line numberDiff line change
@@ -658,4 +658,22 @@ describe('series', function () {
658658
});
659659
});
660660
});
661+
662+
describe('append', function () {
663+
it('Appends a Series to another when ignore_index is false', function () {
664+
var ds1 = new _series2.default([1, 2, 3], { index: [1, 2, 3] });
665+
var ds2 = new _series2.default([2, 3, 4], { index: [2, 3, 4] });
666+
var ds3 = ds1.append(ds2);
667+
expect(ds3.values.toArray()).toEqual([1, 2, 3, 2, 3, 4]);
668+
expect(ds3.index.toArray()).toEqual([1, 2, 3, 2, 3, 4]);
669+
});
670+
671+
it('Appends a Series to another when ignore_index is true', function () {
672+
var ds1 = new _series2.default([1, 2, 3], { index: [1, 2, 3] });
673+
var ds2 = new _series2.default([2, 3, 4], { index: [2, 3, 4] });
674+
var ds3 = ds1.append(ds2, true);
675+
expect(ds3.values.toArray()).toEqual([1, 2, 3, 2, 3, 4]);
676+
expect(ds3.index.toArray()).toEqual([0, 1, 2, 3, 4, 5]);
677+
});
678+
});
661679
});

0 commit comments

Comments
 (0)