df-script 1.4.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +83 -34
- package/dist/api.d.ts +16 -8
- package/dist/api.js +11 -3
- package/dist/columnExpressions/ColumnExpr.d.ts +26 -364
- package/dist/columnExpressions/ColumnExpr.js +199 -3
- package/dist/columnExpressions/ExprBase.d.ts +8 -11
- package/dist/columnExpressions/ExprBase.js +20 -61
- package/dist/columnExpressions/constants.d.ts +2 -0
- package/dist/columnExpressions/constants.js +3 -1
- package/dist/columnExpressions/functions/coalesce.js +8 -4
- package/dist/columnExpressions/functions/element.d.ts +5 -0
- package/dist/columnExpressions/functions/element.js +11 -0
- package/dist/columnExpressions/functions/implode.d.ts +3 -0
- package/dist/columnExpressions/functions/implode.js +7 -0
- package/dist/columnExpressions/functions/lit.d.ts +3 -1
- package/dist/columnExpressions/functions/lit.js +8 -13
- package/dist/columnExpressions/functions/repeat.d.ts +47 -0
- package/dist/columnExpressions/functions/repeat.js +131 -0
- package/dist/columnExpressions/functions/seq_range.d.ts +31 -0
- package/dist/columnExpressions/functions/seq_range.js +91 -0
- package/dist/columnExpressions/functions/when.js +8 -4
- package/dist/columnExpressions/index.d.ts +5 -2
- package/dist/columnExpressions/index.js +5 -48
- package/dist/columnExpressions/mixins/AggregationExpr.d.ts +25 -50
- package/dist/columnExpressions/mixins/AggregationExpr.js +69 -165
- package/dist/columnExpressions/mixins/ArithmeticExpr.d.ts +41 -66
- package/dist/columnExpressions/mixins/ArithmeticExpr.js +126 -138
- package/dist/columnExpressions/mixins/BooleanExpr.d.ts +40 -0
- package/dist/columnExpressions/mixins/BooleanExpr.js +67 -0
- package/dist/columnExpressions/mixins/ComparisonExpr.d.ts +31 -60
- package/dist/columnExpressions/mixins/ComparisonExpr.js +231 -370
- package/dist/columnExpressions/mixins/ListExpr.d.ts +15 -39
- package/dist/columnExpressions/mixins/ListExpr.js +124 -148
- package/dist/columnExpressions/mixins/LogicalExpr.d.ts +7 -33
- package/dist/columnExpressions/mixins/LogicalExpr.js +48 -49
- package/dist/columnExpressions/mixins/ManipulationExpr.d.ts +6 -31
- package/dist/columnExpressions/mixins/ManipulationExpr.js +61 -25
- package/dist/columnExpressions/mixins/NumericExpr.d.ts +92 -0
- package/dist/columnExpressions/mixins/NumericExpr.js +259 -0
- package/dist/columnExpressions/mixins/StringExpr.d.ts +5 -30
- package/dist/columnExpressions/mixins/StringExpr.js +37 -49
- package/dist/columnExpressions/mixins/StructExpr.d.ts +16 -0
- package/dist/columnExpressions/mixins/StructExpr.js +139 -0
- package/dist/columnExpressions/mixins/TemporalExpr.d.ts +4 -30
- package/dist/columnExpressions/mixins/TemporalExpr.js +28 -29
- package/dist/columnExpressions/mixins/WindowExpr.d.ts +27 -49
- package/dist/columnExpressions/mixins/WindowExpr.js +144 -274
- package/dist/columnExpressions/utils.d.ts +4 -0
- package/dist/columnExpressions/utils.js +45 -0
- package/dist/dataframe/constants.d.ts +3 -0
- package/dist/dataframe/constants.js +4 -1
- package/dist/dataframe/dataframe.d.ts +27 -10
- package/dist/dataframe/dataframe.js +461 -220
- package/dist/dataframe/grouped/grouped.d.ts +2 -3
- package/dist/dataframe/grouped/grouped.js +17 -16
- package/dist/dataframe/types.d.ts +65 -1
- package/dist/dataframe/utils.d.ts +11 -3
- package/dist/dataframe/utils.js +101 -9
- package/dist/datatypes/DataType.d.ts +2 -1
- package/dist/datatypes/DataType.js +29 -0
- package/dist/datatypes/index.d.ts +2 -2
- package/dist/datatypes/types.d.ts +37 -36
- package/dist/datatypes/types.js +15 -11
- package/dist/exceptions/index.d.ts +2 -0
- package/dist/exceptions/index.js +4 -1
- package/dist/exceptions/utils.d.ts +1 -0
- package/dist/exceptions/utils.js +19 -0
- package/dist/functions/concat.d.ts +1 -2
- package/dist/functions/concat.js +24 -12
- package/dist/functions/index.d.ts +3 -1
- package/dist/functions/index.js +7 -15
- package/dist/functions/read_csv.d.ts +8 -0
- package/dist/functions/read_csv.js +53 -0
- package/dist/functions/read_json.d.ts +10 -0
- package/dist/functions/read_json.js +21 -0
- package/dist/functions/transpose.d.ts +7 -0
- package/dist/functions/transpose.js +84 -0
- package/dist/index.js +6 -1
- package/dist/types.d.ts +31 -5
- package/dist/utils/csv.d.ts +77 -0
- package/dist/utils/csv.js +313 -0
- package/dist/utils/date.js +5 -6
- package/dist/utils/guards.d.ts +0 -2
- package/dist/utils/guards.js +0 -31
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +2 -0
- package/dist/utils/json.d.ts +120 -2
- package/dist/utils/json.js +204 -20
- package/dist/utils/list.d.ts +173 -1
- package/dist/utils/list.js +255 -22
- package/dist/utils/number.d.ts +61 -28
- package/dist/utils/number.js +248 -70
- package/dist/utils/string.d.ts +5 -0
- package/dist/utils/string.js +89 -0
- package/package.json +5 -1
|
@@ -3,279 +3,149 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.WindowExpr = void 0;
|
|
4
4
|
const ExprBase_1 = require("../ExprBase");
|
|
5
5
|
const utils_1 = require("../../utils");
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
6
|
+
function computeRank(arr, value, options = {}) {
|
|
7
|
+
if (value == null)
|
|
8
|
+
return null;
|
|
9
|
+
let targetArr = arr;
|
|
10
|
+
if (options.ignoreNulls) {
|
|
11
|
+
targetArr = [];
|
|
12
|
+
const len = arr.length;
|
|
13
|
+
for (let i = 0; i < len; i++) {
|
|
14
|
+
if (arr[i] != null)
|
|
15
|
+
targetArr.push(arr[i]);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
if (options.dense) {
|
|
19
|
+
targetArr = Array.from(new Set(targetArr));
|
|
20
|
+
}
|
|
21
|
+
const sorted = [...targetArr].sort((a, b) => a - b);
|
|
22
|
+
const valueToRank = new Map();
|
|
23
|
+
const len = sorted.length;
|
|
24
|
+
for (let i = 0; i < len; i++) {
|
|
25
|
+
const v = sorted[i];
|
|
26
|
+
if (!valueToRank.has(v)) {
|
|
27
|
+
valueToRank.set(v, i + 1);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return valueToRank.get(value) ?? null;
|
|
31
|
+
}
|
|
32
|
+
class WindowExpr extends ExprBase_1.ExprBase {
|
|
33
|
+
partitionBy = this.partitionBy || null;
|
|
34
|
+
_window(evaluateWindow) {
|
|
35
|
+
const newInst = (0, ExprBase_1.derive)(this);
|
|
36
|
+
newInst.partitionOpsIndex = this.ops.length;
|
|
37
|
+
newInst.groupingOpsIndex = this.ops.length;
|
|
38
|
+
newInst.evaluateWindow = evaluateWindow;
|
|
39
|
+
return newInst;
|
|
40
|
+
}
|
|
41
|
+
_rolling(windowSize, aggFn) {
|
|
42
|
+
return this._window(function (groupPreValues, _partitionIndices, currentIndex) {
|
|
43
|
+
const start = Math.max(0, currentIndex - windowSize + 1);
|
|
44
|
+
const end = currentIndex + 1;
|
|
45
|
+
const windowVals = groupPreValues.slice(start, end);
|
|
46
|
+
return aggFn(windowVals);
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
_cum(reverse, initialVal, stepFn, postFn) {
|
|
50
|
+
return this._window(function (groupPreValues, _partitionIndices, currentIndex) {
|
|
51
|
+
let acc = initialVal;
|
|
52
|
+
let hasValid = false;
|
|
53
|
+
const start = reverse ? currentIndex : 0;
|
|
54
|
+
const end = reverse ? groupPreValues.length - 1 : currentIndex;
|
|
55
|
+
for (let i = start; i <= end; i++) {
|
|
56
|
+
const val = groupPreValues[i];
|
|
57
|
+
if (val != null) {
|
|
58
|
+
acc = stepFn(acc, val);
|
|
59
|
+
hasValid = true;
|
|
36
60
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
}
|
|
79
|
-
return
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
}
|
|
128
|
-
const currentVal = groupPreValues[currentIndex];
|
|
129
|
-
return valueToRank.get(currentVal) ?? null;
|
|
130
|
-
};
|
|
131
|
-
return newInst;
|
|
132
|
-
}
|
|
133
|
-
lag(offset = 1, defaultVal = null) {
|
|
134
|
-
const newInst = (0, ExprBase_1.derive)(this);
|
|
135
|
-
newInst.partitionOpsIndex = this.ops.length;
|
|
136
|
-
newInst.groupingOpsIndex = this.ops.length;
|
|
137
|
-
newInst.evaluateWindow = function (groupPreValues, _partitionIndices, currentIndex) {
|
|
138
|
-
let val = defaultVal;
|
|
139
|
-
if (currentIndex - offset >= 0) {
|
|
140
|
-
val = groupPreValues[currentIndex - offset];
|
|
141
|
-
}
|
|
142
|
-
return val;
|
|
143
|
-
};
|
|
144
|
-
return newInst;
|
|
145
|
-
}
|
|
146
|
-
lead(offset = 1, defaultVal = null) {
|
|
147
|
-
const newInst = (0, ExprBase_1.derive)(this);
|
|
148
|
-
newInst.partitionOpsIndex = this.ops.length;
|
|
149
|
-
newInst.groupingOpsIndex = this.ops.length;
|
|
150
|
-
newInst.evaluateWindow = function (groupPreValues, _partitionIndices, currentIndex) {
|
|
151
|
-
let val = defaultVal;
|
|
152
|
-
if (currentIndex + offset < groupPreValues.length) {
|
|
153
|
-
val = groupPreValues[currentIndex + offset];
|
|
154
|
-
}
|
|
155
|
-
return val;
|
|
156
|
-
};
|
|
157
|
-
return newInst;
|
|
158
|
-
}
|
|
159
|
-
over(columns) {
|
|
160
|
-
const newInst = (0, ExprBase_1.derive)(this);
|
|
161
|
-
const cols = Array.isArray(columns) ? columns : [columns];
|
|
162
|
-
newInst.partitionBy = cols;
|
|
163
|
-
return newInst;
|
|
164
|
-
}
|
|
165
|
-
rank() {
|
|
166
|
-
const newInst = (0, ExprBase_1.derive)(this);
|
|
167
|
-
newInst.partitionOpsIndex = this.ops.length;
|
|
168
|
-
newInst.groupingOpsIndex = this.ops.length;
|
|
169
|
-
newInst.evaluateWindow = function (groupPreValues, _partitionIndices, currentIndex) {
|
|
170
|
-
const sorted = [...groupPreValues].sort((a, b) => a - b);
|
|
171
|
-
const valueToRank = new Map();
|
|
172
|
-
for (let i = 0; i < sorted.length; i++) {
|
|
173
|
-
const v = sorted[i];
|
|
174
|
-
if (!valueToRank.has(v)) {
|
|
175
|
-
valueToRank.set(v, i + 1);
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
const currentVal = groupPreValues[currentIndex];
|
|
179
|
-
return valueToRank.get(currentVal) ?? null;
|
|
180
|
-
};
|
|
181
|
-
return newInst;
|
|
182
|
-
}
|
|
183
|
-
rolling_max(windowSize) {
|
|
184
|
-
return this._rolling(windowSize, v => (0, utils_1.getListStats)(v).max);
|
|
185
|
-
}
|
|
186
|
-
rolling_mean(windowSize) {
|
|
187
|
-
return this._rolling(windowSize, v => (0, utils_1.getListStats)(v).mean);
|
|
188
|
-
}
|
|
189
|
-
rolling_median(windowSize) {
|
|
190
|
-
return this._rolling(windowSize, v => {
|
|
191
|
-
if (!(0, utils_1.isArrayOfType)(v, "number", { allowNulls: true }))
|
|
192
|
-
return null;
|
|
193
|
-
const len = v.length;
|
|
194
|
-
const nums = [];
|
|
195
|
-
for (let i = 0; i < len; i++) {
|
|
196
|
-
const val = v[i];
|
|
197
|
-
if (val != null) {
|
|
198
|
-
nums.push(val);
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
const numsLen = nums.length;
|
|
202
|
-
if (numsLen === 0)
|
|
203
|
-
return null;
|
|
204
|
-
nums.sort((a, b) => a - b);
|
|
205
|
-
const mid = Math.floor(numsLen / 2);
|
|
206
|
-
return numsLen % 2 !== 0
|
|
207
|
-
? nums[mid]
|
|
208
|
-
: (nums[mid - 1] + nums[mid]) / 2;
|
|
209
|
-
});
|
|
210
|
-
}
|
|
211
|
-
rolling_min(windowSize) {
|
|
212
|
-
return this._rolling(windowSize, v => (0, utils_1.getListStats)(v).min);
|
|
213
|
-
}
|
|
214
|
-
rolling_quantile(quantile, windowSize) {
|
|
215
|
-
return this._rolling(windowSize, v => {
|
|
216
|
-
const f = [];
|
|
217
|
-
for (let i = 0; i < v.length; i++) {
|
|
218
|
-
if (v[i] != null)
|
|
219
|
-
f.push(v[i]);
|
|
220
|
-
}
|
|
221
|
-
const n = f.length;
|
|
222
|
-
if (n === 0)
|
|
223
|
-
return null;
|
|
224
|
-
f.sort((a, b) => a - b);
|
|
225
|
-
const idx = quantile * (n - 1);
|
|
226
|
-
const low = Math.floor(idx);
|
|
227
|
-
const high = Math.ceil(idx);
|
|
228
|
-
if (low === high)
|
|
229
|
-
return f[low];
|
|
230
|
-
return f[low] + (idx - low) * (f[high] - f[low]);
|
|
231
|
-
});
|
|
232
|
-
}
|
|
233
|
-
rolling_rank(windowSize) {
|
|
234
|
-
const newInst = (0, ExprBase_1.derive)(this);
|
|
235
|
-
newInst.partitionOpsIndex = this.ops.length;
|
|
236
|
-
newInst.groupingOpsIndex = this.ops.length;
|
|
237
|
-
newInst.evaluateWindow = function (groupPreValues, _partitionIndices, currentIndex) {
|
|
238
|
-
const start = Math.max(0, currentIndex - windowSize + 1);
|
|
239
|
-
const end = currentIndex + 1;
|
|
240
|
-
const vals = groupPreValues.slice(start, end);
|
|
241
|
-
const currentVal = groupPreValues[currentIndex];
|
|
242
|
-
if (currentVal == null)
|
|
243
|
-
return null;
|
|
244
|
-
const nonNullVals = [];
|
|
245
|
-
for (let j = 0; j < vals.length; j++) {
|
|
246
|
-
if (vals[j] != null)
|
|
247
|
-
nonNullVals.push(vals[j]);
|
|
248
|
-
}
|
|
249
|
-
if (nonNullVals.length === 0)
|
|
250
|
-
return null;
|
|
251
|
-
const sorted = [...nonNullVals].sort((a, b) => a - b);
|
|
252
|
-
const valueToRank = new Map();
|
|
253
|
-
for (let i = 0; i < sorted.length; i++) {
|
|
254
|
-
const v = sorted[i];
|
|
255
|
-
if (!valueToRank.has(v)) {
|
|
256
|
-
valueToRank.set(v, i + 1);
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
return valueToRank.get(currentVal) ?? null;
|
|
260
|
-
};
|
|
261
|
-
return newInst;
|
|
262
|
-
}
|
|
263
|
-
rolling_std(windowSize) {
|
|
264
|
-
return this._rolling(windowSize, v => (0, utils_1.getListStats)(v).std);
|
|
265
|
-
}
|
|
266
|
-
rolling_sum(windowSize) {
|
|
267
|
-
return this._rolling(windowSize, v => (0, utils_1.getListStats)(v).sum);
|
|
268
|
-
}
|
|
269
|
-
row_number() {
|
|
270
|
-
const newInst = (0, ExprBase_1.derive)(this);
|
|
271
|
-
newInst.partitionOpsIndex = this.ops.length;
|
|
272
|
-
newInst.groupingOpsIndex = this.ops.length;
|
|
273
|
-
newInst.evaluateWindow = function (_groupPreValues, _partitionIndices, currentIndex) {
|
|
274
|
-
return currentIndex + 1;
|
|
275
|
-
};
|
|
276
|
-
newInst.outputName = "row_number";
|
|
277
|
-
return newInst;
|
|
278
|
-
}
|
|
279
|
-
};
|
|
280
|
-
};
|
|
61
|
+
}
|
|
62
|
+
return postFn ? postFn(acc, hasValid) : acc;
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
get isWindow() {
|
|
66
|
+
return this.partitionBy !== null || this.evaluateWindow !== undefined || this.aggFn !== null;
|
|
67
|
+
}
|
|
68
|
+
cum_count(reverse = false) {
|
|
69
|
+
return this._cum(reverse, 0, (acc) => acc + 1);
|
|
70
|
+
}
|
|
71
|
+
cum_max(reverse = false) {
|
|
72
|
+
return this._cum(reverse, null, (acc, val) => (acc === null || val > acc ? val : acc));
|
|
73
|
+
}
|
|
74
|
+
cum_min(reverse = false) {
|
|
75
|
+
return this._cum(reverse, null, (acc, val) => (acc === null || val < acc ? val : acc));
|
|
76
|
+
}
|
|
77
|
+
cum_prod(reverse = false) {
|
|
78
|
+
return this._cum(reverse, 1, (acc, val) => acc * val, (acc, hasValid) => (hasValid ? acc : null));
|
|
79
|
+
}
|
|
80
|
+
cum_sum(reverse = false) {
|
|
81
|
+
return this._cum(reverse, 0, (acc, val) => acc + val);
|
|
82
|
+
}
|
|
83
|
+
dense_rank() {
|
|
84
|
+
return this._window(function (groupPreValues, _partitionIndices, currentIndex) {
|
|
85
|
+
return computeRank(groupPreValues, groupPreValues[currentIndex], { dense: true });
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
lag(offset = 1, defaultVal = null) {
|
|
89
|
+
return this._window(function (groupPreValues, _partitionIndices, currentIndex) {
|
|
90
|
+
let val = defaultVal;
|
|
91
|
+
if (currentIndex - offset >= 0) {
|
|
92
|
+
val = groupPreValues[currentIndex - offset];
|
|
93
|
+
}
|
|
94
|
+
return val;
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
lead(offset = 1, defaultVal = null) {
|
|
98
|
+
return this._window(function (groupPreValues, _partitionIndices, currentIndex) {
|
|
99
|
+
let val = defaultVal;
|
|
100
|
+
if (currentIndex + offset < groupPreValues.length) {
|
|
101
|
+
val = groupPreValues[currentIndex + offset];
|
|
102
|
+
}
|
|
103
|
+
return val;
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
over(columns) {
|
|
107
|
+
const newInst = (0, ExprBase_1.derive)(this);
|
|
108
|
+
const cols = Array.isArray(columns) ? columns : [columns];
|
|
109
|
+
newInst.partitionBy = cols;
|
|
110
|
+
return newInst;
|
|
111
|
+
}
|
|
112
|
+
rank() {
|
|
113
|
+
return this._window(function (groupPreValues, _partitionIndices, currentIndex) {
|
|
114
|
+
return computeRank(groupPreValues, groupPreValues[currentIndex]);
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
rolling_max(windowSize) {
|
|
118
|
+
return this._rolling(windowSize, v => (0, utils_1.getListStats)(v).max);
|
|
119
|
+
}
|
|
120
|
+
rolling_mean(windowSize) {
|
|
121
|
+
return this._rolling(windowSize, v => (0, utils_1.getListStats)(v).mean);
|
|
122
|
+
}
|
|
123
|
+
rolling_median(windowSize) {
|
|
124
|
+
return this._rolling(windowSize, v => (0, utils_1.computeMedian)(v));
|
|
125
|
+
}
|
|
126
|
+
rolling_min(windowSize) {
|
|
127
|
+
return this._rolling(windowSize, v => (0, utils_1.getListStats)(v).min);
|
|
128
|
+
}
|
|
129
|
+
rolling_quantile(quantile, windowSize) {
|
|
130
|
+
return this._rolling(windowSize, v => (0, utils_1.computeQuantile)(v, quantile));
|
|
131
|
+
}
|
|
132
|
+
rolling_rank(windowSize) {
|
|
133
|
+
return this._rolling(windowSize, (vals) => {
|
|
134
|
+
return computeRank(vals, vals[vals.length - 1], { ignoreNulls: true });
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
rolling_std(windowSize) {
|
|
138
|
+
return this._rolling(windowSize, v => (0, utils_1.getListStats)(v).std);
|
|
139
|
+
}
|
|
140
|
+
rolling_sum(windowSize) {
|
|
141
|
+
return this._rolling(windowSize, v => (0, utils_1.getListStats)(v).sum);
|
|
142
|
+
}
|
|
143
|
+
row_number() {
|
|
144
|
+
const newInst = this._window(function (_groupPreValues, _partitionIndices, currentIndex) {
|
|
145
|
+
return currentIndex + 1;
|
|
146
|
+
});
|
|
147
|
+
newInst.outputName = "row_number";
|
|
148
|
+
return newInst;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
281
151
|
exports.WindowExpr = WindowExpr;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { IExpr, ColumnData, ColumnDict } from "../types";
|
|
2
|
+
export declare const kleeneUnary: (fn: (v: any) => any) => (vArray: ColumnData) => any[];
|
|
3
|
+
export declare const kleeneBinary: (expr: IExpr, other: any, fn: (v: any, r: any) => any) => (vArray: ColumnData, columns: ColumnDict) => any[];
|
|
4
|
+
export declare function evaluateExpression(expr: IExpr, columns: ColumnDict, height: number): ColumnData;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.kleeneBinary = exports.kleeneUnary = void 0;
|
|
4
|
+
exports.evaluateExpression = evaluateExpression;
|
|
5
|
+
const utils_1 = require("../utils");
|
|
6
|
+
const utils_2 = require("../dataframe/utils");
|
|
7
|
+
const kleeneUnary = (fn) => {
|
|
8
|
+
return (vArray) => {
|
|
9
|
+
const height = vArray.length;
|
|
10
|
+
const result = new Array(height);
|
|
11
|
+
for (let i = 0; i < height; i++) {
|
|
12
|
+
const v = vArray[i];
|
|
13
|
+
result[i] = v == null ? null : fn(v);
|
|
14
|
+
}
|
|
15
|
+
return result;
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
exports.kleeneUnary = kleeneUnary;
|
|
19
|
+
const kleeneBinary = (expr, other, fn) => {
|
|
20
|
+
return (vArray, columns) => {
|
|
21
|
+
const height = vArray.length;
|
|
22
|
+
const rResolved = expr._resolve(other, columns, height);
|
|
23
|
+
const result = new Array(height);
|
|
24
|
+
if ((0, utils_1.isArrayOrTypedArray)(rResolved)) {
|
|
25
|
+
for (let i = 0; i < height; i++) {
|
|
26
|
+
const v = vArray[i];
|
|
27
|
+
const r = rResolved[i];
|
|
28
|
+
result[i] = (v == null || r == null) ? null : fn(v, r);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
for (let i = 0; i < height; i++) {
|
|
33
|
+
const v = vArray[i];
|
|
34
|
+
result[i] = (v == null || rResolved == null) ? null : fn(v, rResolved);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
exports.kleeneBinary = kleeneBinary;
|
|
41
|
+
function evaluateExpression(expr, columns, height) {
|
|
42
|
+
return expr.isWindow
|
|
43
|
+
? (0, utils_2.resolveWindowExpr)(expr, columns, height)
|
|
44
|
+
: expr.evaluate(columns, height);
|
|
45
|
+
}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.KEY_SEPARATOR = void 0;
|
|
3
|
+
exports.UTF8_BOM = exports.CARRIAGE_RETURN = exports.NEWLINE = exports.KEY_SEPARATOR = void 0;
|
|
4
4
|
exports.KEY_SEPARATOR = "\x00";
|
|
5
|
+
exports.NEWLINE = "\n";
|
|
6
|
+
exports.CARRIAGE_RETURN = "\r";
|
|
7
|
+
exports.UTF8_BOM = "\ufeff";
|
|
@@ -1,42 +1,59 @@
|
|
|
1
1
|
import { GroupedData } from "./grouped/grouped";
|
|
2
|
-
import type { IExpr, ColumnDict, DataFrameColumns, ConcatOptions, ConcatItem, HorizontalConcatOptions, RowRecord } from "../types";
|
|
3
|
-
import type { LimitOptions, SortOptions, PivotOptions, JoinOptions, UnpivotOptions } from "./types";
|
|
4
|
-
import { DataType } from "../datatypes";
|
|
2
|
+
import type { IExpr, ColumnData, ColumnDict, DataFrameColumns, ConcatOptions, ConcatItem, HorizontalConcatOptions, RowRecord, DataFrameSchema, RegisteredDataType, ExplodeOptions, IntoExpr, FillNullOptions } from "../types";
|
|
3
|
+
import type { LimitOptions, SortOptions, PivotOptions, JoinOptions, UnpivotOptions, TransposeOptions, WriteJSONOptions, WriteCSVOptions } from "./types";
|
|
5
4
|
export declare class DataFrame<T extends RowRecord = any> {
|
|
6
5
|
_columns: DataFrameColumns<T>;
|
|
7
6
|
private _height;
|
|
8
7
|
private _schema;
|
|
9
|
-
|
|
8
|
+
static _createDirect<U extends RowRecord = any>(columns: ColumnDict, schema: DataFrameSchema, height: number): DataFrame<U>;
|
|
9
|
+
constructor(data: T[] | ColumnDict, schema?: DataFrameSchema, height?: number);
|
|
10
10
|
private inferSchema;
|
|
11
11
|
private applySchema;
|
|
12
|
-
getSchema(): Record<string, DataType>;
|
|
13
|
-
to_dicts(): T[];
|
|
14
|
-
to_dict(): DataFrameColumns<T>;
|
|
15
12
|
get columns(): string[];
|
|
16
13
|
concat<U extends RowRecord = any>(items: ConcatItem | ConcatItem[], options?: ConcatOptions): DataFrame<U>;
|
|
17
14
|
drop<K extends keyof T>(...args: (K | K[])[]): DataFrame<Omit<T, K>>;
|
|
18
|
-
|
|
15
|
+
drop_nulls(subset?: string | string[]): DataFrame<T>;
|
|
16
|
+
get dtypes(): RegisteredDataType[];
|
|
17
|
+
explode(columns: IntoExpr | IntoExpr[], options?: ExplodeOptions): DataFrame<any>;
|
|
18
|
+
fill_null(options?: FillNullOptions): DataFrame<T>;
|
|
19
19
|
filter(...exprs: (IExpr | ((row: T) => any))[]): DataFrame<T>;
|
|
20
|
+
get_schema(): DataFrameSchema;
|
|
20
21
|
groupby<K extends keyof T>(keys: K | K[]): GroupedData<T, K>;
|
|
21
22
|
head(n?: number): DataFrame<T>;
|
|
22
23
|
get height(): number;
|
|
23
24
|
hstack<U extends RowRecord = any>(other: ConcatItem | ConcatItem[], options?: HorizontalConcatOptions): DataFrame<U>;
|
|
25
|
+
insert_column(index: number, name: string, expr: IntoExpr): DataFrame<any>;
|
|
26
|
+
item(row?: number, column?: number | string): any;
|
|
27
|
+
iter_columns(): Generator<ColumnData>;
|
|
28
|
+
iter_rows({ named }?: {
|
|
29
|
+
named?: boolean;
|
|
30
|
+
}): Generator<any[] | Record<string, any>>;
|
|
24
31
|
join<U extends RowRecord = any, R extends RowRecord = any>(config: JoinOptions<T, U>): DataFrame<R>;
|
|
25
|
-
limit(n: number,
|
|
32
|
+
limit(n: number, { offset, from }?: LimitOptions): DataFrame<T>;
|
|
26
33
|
pivot<U extends RowRecord = any>(config: PivotOptions<T>): DataFrame<U>;
|
|
27
34
|
rename(mapping?: Partial<Record<keyof T, string>>): DataFrame<any>;
|
|
28
35
|
reverse(): DataFrame<T>;
|
|
29
|
-
get schema():
|
|
36
|
+
get schema(): DataFrameSchema;
|
|
30
37
|
select<U extends RowRecord = any>(...args: (string | IExpr | Record<string, any> | (string | IExpr | Record<string, any>)[])[]): DataFrame<U>;
|
|
31
38
|
get shape(): [number, number];
|
|
32
39
|
slice(start: number, end?: number): DataFrame<T>;
|
|
33
40
|
sort(config?: SortOptions<T>): DataFrame<T>;
|
|
34
41
|
tail(n?: number): DataFrame<T>;
|
|
42
|
+
to_dict(): DataFrameColumns<T>;
|
|
43
|
+
to_dicts(): T[];
|
|
35
44
|
to_list<K extends keyof T>(nameOrExpr: K | IExpr): any[];
|
|
45
|
+
transpose({ include_header: includeHeader, header_name: headerName, column_names: colNamesOpt }?: TransposeOptions): DataFrame<any>;
|
|
36
46
|
unique<K extends keyof T>(columns?: K | K[]): DataFrame<T>;
|
|
37
47
|
unpivot<U extends RowRecord = any>(config: UnpivotOptions<T>): DataFrame<U>;
|
|
38
48
|
vstack<U extends RowRecord = any>(other: ConcatItem | ConcatItem[]): DataFrame<U>;
|
|
39
49
|
get width(): number;
|
|
40
50
|
private _normalizeArgs;
|
|
41
51
|
with_columns(...args: (string | IExpr | Record<string, any> | (string | IExpr | Record<string, any>)[])[]): DataFrame<any>;
|
|
52
|
+
with_row_index(name?: string, offset?: number): DataFrame<any>;
|
|
53
|
+
write_json(file?: string | {
|
|
54
|
+
write: (str: string) => void;
|
|
55
|
+
}, { format, replacerOptions }?: WriteJSONOptions): string;
|
|
56
|
+
write_csv(file?: string | {
|
|
57
|
+
write: (str: string) => void;
|
|
58
|
+
}, options?: WriteCSVOptions): string;
|
|
42
59
|
}
|