polars-df 0.5.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +14 -0
- data/Cargo.lock +337 -381
- data/README.md +4 -3
- data/ext/polars/Cargo.toml +5 -4
- data/ext/polars/src/apply/mod.rs +7 -3
- data/ext/polars/src/conversion.rs +171 -63
- data/ext/polars/src/dataframe.rs +19 -23
- data/ext/polars/src/error.rs +8 -0
- data/ext/polars/src/expr/array.rs +15 -0
- data/ext/polars/src/expr/general.rs +39 -9
- data/ext/polars/src/expr/list.rs +27 -22
- data/ext/polars/src/expr/string.rs +10 -9
- data/ext/polars/src/expr.rs +1 -0
- data/ext/polars/src/functions/lazy.rs +61 -21
- data/ext/polars/src/lazyframe.rs +14 -2
- data/ext/polars/src/lib.rs +25 -20
- data/ext/polars/src/object.rs +1 -1
- data/ext/polars/src/rb_modules.rs +4 -0
- data/ext/polars/src/series/construction.rs +28 -2
- data/ext/polars/src/series.rs +57 -17
- data/lib/polars/array_expr.rb +84 -0
- data/lib/polars/array_name_space.rb +77 -0
- data/lib/polars/batched_csv_reader.rb +1 -1
- data/lib/polars/data_frame.rb +91 -49
- data/lib/polars/data_types.rb +163 -29
- data/lib/polars/date_time_name_space.rb +17 -3
- data/lib/polars/expr.rb +76 -69
- data/lib/polars/functions.rb +0 -1
- data/lib/polars/group_by.rb +1 -22
- data/lib/polars/lazy_frame.rb +82 -30
- data/lib/polars/lazy_functions.rb +67 -31
- data/lib/polars/list_expr.rb +28 -28
- data/lib/polars/list_name_space.rb +13 -13
- data/lib/polars/rolling_group_by.rb +4 -2
- data/lib/polars/series.rb +70 -16
- data/lib/polars/string_expr.rb +137 -11
- data/lib/polars/string_name_space.rb +137 -22
- data/lib/polars/utils.rb +107 -57
- data/lib/polars/version.rb +1 -1
- data/lib/polars.rb +3 -0
- metadata +5 -2
@@ -14,7 +14,7 @@ module Polars
|
|
14
14
|
|
15
15
|
if name.is_a?(DataType)
|
16
16
|
Utils.wrap_expr(_dtype_cols([name]))
|
17
|
-
elsif name.is_a?(Array)
|
17
|
+
elsif name.is_a?(::Array)
|
18
18
|
if name.length == 0 || Utils.strlike?(name[0])
|
19
19
|
name = name.map { |v| v.is_a?(Symbol) ? v.to_s : v }
|
20
20
|
Utils.wrap_expr(RbExpr.cols(name))
|
@@ -36,7 +36,7 @@ module Polars
|
|
36
36
|
# @example A horizontal rank computation by taking the elements of a list
|
37
37
|
# df = Polars::DataFrame.new({"a" => [1, 8, 3], "b" => [4, 5, 2]})
|
38
38
|
# df.with_column(
|
39
|
-
# Polars.concat_list(["a", "b"]).
|
39
|
+
# Polars.concat_list(["a", "b"]).list.eval(Polars.element.rank).alias("rank")
|
40
40
|
# )
|
41
41
|
# # =>
|
42
42
|
# # shape: (3, 3)
|
@@ -156,9 +156,8 @@ module Polars
|
|
156
156
|
column.sum
|
157
157
|
elsif Utils.strlike?(column)
|
158
158
|
col(column.to_s).sum
|
159
|
-
elsif column.is_a?(Array)
|
159
|
+
elsif column.is_a?(::Array)
|
160
160
|
exprs = Utils.selection_to_rbexpr_list(column)
|
161
|
-
# TODO
|
162
161
|
Utils.wrap_expr(_sum_exprs(exprs))
|
163
162
|
else
|
164
163
|
fold(lit(0).cast(:u32), ->(a, b) { a + b }, column).alias("sum")
|
@@ -283,18 +282,33 @@ module Polars
|
|
283
282
|
# Return an expression representing a literal value.
|
284
283
|
#
|
285
284
|
# @return [Expr]
|
286
|
-
def lit(value)
|
287
|
-
if value.is_a?(
|
285
|
+
def lit(value, dtype: nil, allow_object: nil)
|
286
|
+
if value.is_a?(::Time) || value.is_a?(::DateTime)
|
287
|
+
time_unit = dtype&.time_unit || "ns"
|
288
|
+
time_zone = dtype.&time_zone
|
289
|
+
e = lit(Utils._datetime_to_pl_timestamp(value, time_unit)).cast(Datetime.new(time_unit))
|
290
|
+
if time_zone
|
291
|
+
return e.dt.replace_time_zone(time_zone.to_s)
|
292
|
+
else
|
293
|
+
return e
|
294
|
+
end
|
295
|
+
elsif value.is_a?(::Date)
|
296
|
+
return lit(::Time.utc(value.year, value.month, value.day)).cast(Date)
|
297
|
+
elsif value.is_a?(Polars::Series)
|
288
298
|
name = value.name
|
289
299
|
value = value._s
|
290
|
-
e = Utils.wrap_expr(RbExpr.lit(value))
|
300
|
+
e = Utils.wrap_expr(RbExpr.lit(value, allow_object))
|
291
301
|
if name == ""
|
292
302
|
return e
|
293
303
|
end
|
294
304
|
return e.alias(name)
|
305
|
+
elsif (defined?(Numo::NArray) && value.is_a?(Numo::NArray)) || value.is_a?(::Array)
|
306
|
+
return lit(Series.new("", value))
|
307
|
+
elsif dtype
|
308
|
+
return Utils.wrap_expr(RbExpr.lit(value, allow_object)).cast(dtype)
|
295
309
|
end
|
296
310
|
|
297
|
-
Utils.wrap_expr(RbExpr.lit(value))
|
311
|
+
Utils.wrap_expr(RbExpr.lit(value, allow_object))
|
298
312
|
end
|
299
313
|
|
300
314
|
# Cumulatively sum values in a column/Series, or horizontally across list of columns/expressions.
|
@@ -625,23 +639,42 @@ module Polars
|
|
625
639
|
# @return [Expr, Series]
|
626
640
|
#
|
627
641
|
# @example
|
628
|
-
#
|
642
|
+
# Polars.arange(0, 3, eager: true)
|
643
|
+
# # =>
|
644
|
+
# # shape: (3,)
|
645
|
+
# # Series: 'arange' [i64]
|
646
|
+
# # [
|
647
|
+
# # 0
|
648
|
+
# # 1
|
649
|
+
# # 2
|
650
|
+
# # ]
|
651
|
+
#
|
652
|
+
# @example
|
653
|
+
# df = Polars::DataFrame.new({"a" => [1, 2], "b" => [3, 4]})
|
654
|
+
# df.select(Polars.arange(Polars.col("a"), Polars.col("b")))
|
655
|
+
# # =>
|
656
|
+
# # shape: (2, 1)
|
657
|
+
# # ┌───────────┐
|
658
|
+
# # │ arange │
|
659
|
+
# # │ --- │
|
660
|
+
# # │ list[i64] │
|
661
|
+
# # ╞═══════════╡
|
662
|
+
# # │ [1, 2] │
|
663
|
+
# # │ [2, 3] │
|
664
|
+
# # └───────────┘
|
629
665
|
def arange(low, high, step: 1, eager: false, dtype: nil)
|
630
666
|
low = Utils.expr_to_lit_or_expr(low, str_to_lit: false)
|
631
667
|
high = Utils.expr_to_lit_or_expr(high, str_to_lit: false)
|
632
668
|
range_expr = Utils.wrap_expr(RbExpr.arange(low._rbexpr, high._rbexpr, step))
|
633
669
|
|
634
|
-
if !dtype.nil? &&
|
670
|
+
if !dtype.nil? && !["i64", Int64].include?(dtype)
|
635
671
|
range_expr = range_expr.cast(dtype)
|
636
672
|
end
|
637
673
|
|
638
674
|
if !eager
|
639
675
|
range_expr
|
640
676
|
else
|
641
|
-
DataFrame.new
|
642
|
-
.select(range_expr)
|
643
|
-
.to_series
|
644
|
-
.rename("arange", in_place: true)
|
677
|
+
DataFrame.new.select(range_expr.alias("arange")).to_series
|
645
678
|
end
|
646
679
|
end
|
647
680
|
|
@@ -658,7 +691,7 @@ module Polars
|
|
658
691
|
#
|
659
692
|
# @return [Expr]
|
660
693
|
def arg_sort_by(exprs, reverse: false)
|
661
|
-
if !exprs.is_a?(Array)
|
694
|
+
if !exprs.is_a?(::Array)
|
662
695
|
exprs = [exprs]
|
663
696
|
end
|
664
697
|
if reverse == true || reverse == false
|
@@ -997,19 +1030,24 @@ module Polars
|
|
997
1030
|
# Only used in `eager` mode. As expression, use `alias`.
|
998
1031
|
#
|
999
1032
|
# @return [Expr]
|
1000
|
-
def repeat(value, n, eager: false, name: nil)
|
1033
|
+
def repeat(value, n, dtype: nil, eager: false, name: nil)
|
1034
|
+
if !name.nil?
|
1035
|
+
warn "the `name` argument is deprecated. Use the `alias` method instead."
|
1036
|
+
end
|
1037
|
+
|
1038
|
+
if n.is_a?(Integer)
|
1039
|
+
n = lit(n)
|
1040
|
+
end
|
1041
|
+
|
1042
|
+
value = Utils.parse_as_expression(value, str_as_lit: true)
|
1043
|
+
expr = Utils.wrap_expr(RbExpr.repeat(value, n._rbexpr, dtype))
|
1044
|
+
if !name.nil?
|
1045
|
+
expr = expr.alias(name)
|
1046
|
+
end
|
1001
1047
|
if eager
|
1002
|
-
|
1003
|
-
name = ""
|
1004
|
-
end
|
1005
|
-
dtype = py_type_to_dtype(type(value))
|
1006
|
-
Series._repeat(name, value, n, dtype)
|
1007
|
-
else
|
1008
|
-
if n.is_a?(Integer)
|
1009
|
-
n = lit(n)
|
1010
|
-
end
|
1011
|
-
Utils.wrap_expr(RbExpr.repeat(value, n._rbexpr))
|
1048
|
+
return select(expr).to_series
|
1012
1049
|
end
|
1050
|
+
expr
|
1013
1051
|
end
|
1014
1052
|
|
1015
1053
|
# Return indices where `condition` evaluates `true`.
|
@@ -1124,13 +1162,11 @@ module Polars
|
|
1124
1162
|
end
|
1125
1163
|
|
1126
1164
|
if unit == "d"
|
1127
|
-
expr = column.cast(
|
1165
|
+
expr = column.cast(Date)
|
1128
1166
|
elsif unit == "s"
|
1129
|
-
|
1130
|
-
# expr = (column.cast(:i64) * 1_000_000).cast(Datetime("us"))
|
1167
|
+
expr = (column.cast(Int64) * 1_000_000).cast(Datetime.new("us"))
|
1131
1168
|
elsif Utils::DTYPE_TEMPORAL_UNITS.include?(unit)
|
1132
|
-
|
1133
|
-
# expr = column.cast(Datetime(unit))
|
1169
|
+
expr = column.cast(Datetime.new(unit))
|
1134
1170
|
else
|
1135
1171
|
raise ArgumentError, "'unit' must be one of {{'ns', 'us', 'ms', 's', 'd'}}, got '#{unit}'."
|
1136
1172
|
end
|
data/lib/polars/list_expr.rb
CHANGED
@@ -15,7 +15,7 @@ module Polars
|
|
15
15
|
#
|
16
16
|
# @example
|
17
17
|
# df = Polars::DataFrame.new({"foo" => [1, 2], "bar" => [["a", "b"], ["c"]]})
|
18
|
-
# df.select(Polars.col("bar").
|
18
|
+
# df.select(Polars.col("bar").list.lengths)
|
19
19
|
# # =>
|
20
20
|
# # shape: (2, 1)
|
21
21
|
# # ┌─────┐
|
@@ -36,7 +36,7 @@ module Polars
|
|
36
36
|
#
|
37
37
|
# @example
|
38
38
|
# df = Polars::DataFrame.new({"values" => [[1], [2, 3]]})
|
39
|
-
# df.select(Polars.col("values").
|
39
|
+
# df.select(Polars.col("values").list.sum)
|
40
40
|
# # =>
|
41
41
|
# # shape: (2, 1)
|
42
42
|
# # ┌────────┐
|
@@ -57,7 +57,7 @@ module Polars
|
|
57
57
|
#
|
58
58
|
# @example
|
59
59
|
# df = Polars::DataFrame.new({"values" => [[1], [2, 3]]})
|
60
|
-
# df.select(Polars.col("values").
|
60
|
+
# df.select(Polars.col("values").list.max)
|
61
61
|
# # =>
|
62
62
|
# # shape: (2, 1)
|
63
63
|
# # ┌────────┐
|
@@ -78,7 +78,7 @@ module Polars
|
|
78
78
|
#
|
79
79
|
# @example
|
80
80
|
# df = Polars::DataFrame.new({"values" => [[1], [2, 3]]})
|
81
|
-
# df.select(Polars.col("values").
|
81
|
+
# df.select(Polars.col("values").list.min)
|
82
82
|
# # =>
|
83
83
|
# # shape: (2, 1)
|
84
84
|
# # ┌────────┐
|
@@ -99,7 +99,7 @@ module Polars
|
|
99
99
|
#
|
100
100
|
# @example
|
101
101
|
# df = Polars::DataFrame.new({"values" => [[1], [2, 3]]})
|
102
|
-
# df.select(Polars.col("values").
|
102
|
+
# df.select(Polars.col("values").list.mean)
|
103
103
|
# # =>
|
104
104
|
# # shape: (2, 1)
|
105
105
|
# # ┌────────┐
|
@@ -124,7 +124,7 @@ module Polars
|
|
124
124
|
# "a" => [[3, 2, 1], [9, 1, 2]]
|
125
125
|
# }
|
126
126
|
# )
|
127
|
-
# df.select(Polars.col("a").
|
127
|
+
# df.select(Polars.col("a").list.sort)
|
128
128
|
# # =>
|
129
129
|
# # shape: (2, 1)
|
130
130
|
# # ┌───────────┐
|
@@ -149,7 +149,7 @@ module Polars
|
|
149
149
|
# "a" => [[3, 2, 1], [9, 1, 2]]
|
150
150
|
# }
|
151
151
|
# )
|
152
|
-
# df.select(Polars.col("a").
|
152
|
+
# df.select(Polars.col("a").list.reverse)
|
153
153
|
# # =>
|
154
154
|
# # shape: (2, 1)
|
155
155
|
# # ┌───────────┐
|
@@ -174,7 +174,7 @@ module Polars
|
|
174
174
|
# "a" => [[1, 1, 2]]
|
175
175
|
# }
|
176
176
|
# )
|
177
|
-
# df.select(Polars.col("a").
|
177
|
+
# df.select(Polars.col("a").list.unique)
|
178
178
|
# # =>
|
179
179
|
# # shape: (1, 1)
|
180
180
|
# # ┌───────────┐
|
@@ -202,7 +202,7 @@ module Polars
|
|
202
202
|
# "b" => [["b", "c"], ["y", "z"]]
|
203
203
|
# }
|
204
204
|
# )
|
205
|
-
# df.select(Polars.col("a").
|
205
|
+
# df.select(Polars.col("a").list.concat("b"))
|
206
206
|
# # =>
|
207
207
|
# # shape: (2, 1)
|
208
208
|
# # ┌─────────────────┐
|
@@ -214,11 +214,11 @@ module Polars
|
|
214
214
|
# # │ ["x", "y", "z"] │
|
215
215
|
# # └─────────────────┘
|
216
216
|
def concat(other)
|
217
|
-
if other.is_a?(Array) && ![Expr, String, Series].any? { |c| other[0].is_a?(c) }
|
217
|
+
if other.is_a?(::Array) && ![Expr, String, Series].any? { |c| other[0].is_a?(c) }
|
218
218
|
return concat(Series.new([other]))
|
219
219
|
end
|
220
220
|
|
221
|
-
if !other.is_a?(Array)
|
221
|
+
if !other.is_a?(::Array)
|
222
222
|
other_list = [other]
|
223
223
|
else
|
224
224
|
other_list = other.dup
|
@@ -241,7 +241,7 @@ module Polars
|
|
241
241
|
#
|
242
242
|
# @example
|
243
243
|
# df = Polars::DataFrame.new({"foo" => [[3, 2, 1], [], [1, 2]]})
|
244
|
-
# df.select(Polars.col("foo").
|
244
|
+
# df.select(Polars.col("foo").list.get(0))
|
245
245
|
# # =>
|
246
246
|
# # shape: (3, 1)
|
247
247
|
# # ┌──────┐
|
@@ -254,7 +254,7 @@ module Polars
|
|
254
254
|
# # │ 1 │
|
255
255
|
# # └──────┘
|
256
256
|
def get(index)
|
257
|
-
index = Utils.
|
257
|
+
index = Utils.parse_as_expression(index)
|
258
258
|
Utils.wrap_expr(_rbexpr.list_get(index))
|
259
259
|
end
|
260
260
|
|
@@ -280,7 +280,7 @@ module Polars
|
|
280
280
|
#
|
281
281
|
# @return [Expr]
|
282
282
|
def take(index, null_on_oob: false)
|
283
|
-
if index.is_a?(Array)
|
283
|
+
if index.is_a?(::Array)
|
284
284
|
index = Series.new(index)
|
285
285
|
end
|
286
286
|
index = Utils.expr_to_lit_or_expr(index, str_to_lit: false)._rbexpr
|
@@ -293,7 +293,7 @@ module Polars
|
|
293
293
|
#
|
294
294
|
# @example
|
295
295
|
# df = Polars::DataFrame.new({"foo" => [[3, 2, 1], [], [1, 2]]})
|
296
|
-
# df.select(Polars.col("foo").
|
296
|
+
# df.select(Polars.col("foo").list.first)
|
297
297
|
# # =>
|
298
298
|
# # shape: (3, 1)
|
299
299
|
# # ┌──────┐
|
@@ -315,7 +315,7 @@ module Polars
|
|
315
315
|
#
|
316
316
|
# @example
|
317
317
|
# df = Polars::DataFrame.new({"foo" => [[3, 2, 1], [], [1, 2]]})
|
318
|
-
# df.select(Polars.col("foo").
|
318
|
+
# df.select(Polars.col("foo").list.last)
|
319
319
|
# # =>
|
320
320
|
# # shape: (3, 1)
|
321
321
|
# # ┌──────┐
|
@@ -340,7 +340,7 @@ module Polars
|
|
340
340
|
#
|
341
341
|
# @example
|
342
342
|
# df = Polars::DataFrame.new({"foo" => [[3, 2, 1], [], [1, 2]]})
|
343
|
-
# df.select(Polars.col("foo").
|
343
|
+
# df.select(Polars.col("foo").list.contains(1))
|
344
344
|
# # =>
|
345
345
|
# # shape: (3, 1)
|
346
346
|
# # ┌───────┐
|
@@ -367,7 +367,7 @@ module Polars
|
|
367
367
|
#
|
368
368
|
# @example
|
369
369
|
# df = Polars::DataFrame.new({"s" => [["a", "b", "c"], ["x", "y"]]})
|
370
|
-
# df.select(Polars.col("s").
|
370
|
+
# df.select(Polars.col("s").list.join(" "))
|
371
371
|
# # =>
|
372
372
|
# # shape: (2, 1)
|
373
373
|
# # ┌───────┐
|
@@ -392,7 +392,7 @@ module Polars
|
|
392
392
|
# "a" => [[1, 2], [2, 1]]
|
393
393
|
# }
|
394
394
|
# )
|
395
|
-
# df.select(Polars.col("a").
|
395
|
+
# df.select(Polars.col("a").list.arg_min)
|
396
396
|
# # =>
|
397
397
|
# # shape: (2, 1)
|
398
398
|
# # ┌─────┐
|
@@ -417,7 +417,7 @@ module Polars
|
|
417
417
|
# "a" => [[1, 2], [2, 1]]
|
418
418
|
# }
|
419
419
|
# )
|
420
|
-
# df.select(Polars.col("a").
|
420
|
+
# df.select(Polars.col("a").list.arg_max)
|
421
421
|
# # =>
|
422
422
|
# # shape: (2, 1)
|
423
423
|
# # ┌─────┐
|
@@ -443,7 +443,7 @@ module Polars
|
|
443
443
|
#
|
444
444
|
# @example
|
445
445
|
# s = Polars::Series.new("a", [[1, 2, 3, 4], [10, 2, 1]])
|
446
|
-
# s.
|
446
|
+
# s.list.diff
|
447
447
|
# # =>
|
448
448
|
# # shape: (2,)
|
449
449
|
# # Series: 'a' [list[i64]]
|
@@ -464,7 +464,7 @@ module Polars
|
|
464
464
|
#
|
465
465
|
# @example
|
466
466
|
# s = Polars::Series.new("a", [[1, 2, 3, 4], [10, 2, 1]])
|
467
|
-
# s.
|
467
|
+
# s.list.shift
|
468
468
|
# # =>
|
469
469
|
# # shape: (2,)
|
470
470
|
# # Series: 'a' [list[i64]]
|
@@ -488,7 +488,7 @@ module Polars
|
|
488
488
|
#
|
489
489
|
# @example
|
490
490
|
# s = Polars::Series.new("a", [[1, 2, 3, 4], [10, 2, 1]])
|
491
|
-
# s.
|
491
|
+
# s.list.slice(1, 2)
|
492
492
|
# # =>
|
493
493
|
# # shape: (2,)
|
494
494
|
# # Series: 'a' [list[i64]]
|
@@ -511,7 +511,7 @@ module Polars
|
|
511
511
|
#
|
512
512
|
# @example
|
513
513
|
# s = Polars::Series.new("a", [[1, 2, 3, 4], [10, 2, 1]])
|
514
|
-
# s.
|
514
|
+
# s.list.head(2)
|
515
515
|
# # =>
|
516
516
|
# # shape: (2,)
|
517
517
|
# # Series: 'a' [list[i64]]
|
@@ -532,7 +532,7 @@ module Polars
|
|
532
532
|
#
|
533
533
|
# @example
|
534
534
|
# s = Polars::Series.new("a", [[1, 2, 3, 4], [10, 2, 1]])
|
535
|
-
# s.
|
535
|
+
# s.list.tail(2)
|
536
536
|
# # =>
|
537
537
|
# # shape: (2,)
|
538
538
|
# # Series: 'a' [list[i64]]
|
@@ -554,7 +554,7 @@ module Polars
|
|
554
554
|
#
|
555
555
|
# @example
|
556
556
|
# df = Polars::DataFrame.new({"listcol" => [[0], [1], [1, 2, 3, 2], [1, 2, 1], [4, 4]]})
|
557
|
-
# df.select(Polars.col("listcol").
|
557
|
+
# df.select(Polars.col("listcol").list.count_match(2).alias("number_of_twos"))
|
558
558
|
# # =>
|
559
559
|
# # shape: (5, 1)
|
560
560
|
# # ┌────────────────┐
|
@@ -584,7 +584,7 @@ module Polars
|
|
584
584
|
#
|
585
585
|
# @example
|
586
586
|
# df = Polars::DataFrame.new({"a" => [[1, 2, 3], [1, 2]]})
|
587
|
-
# df.select([Polars.col("a").
|
587
|
+
# df.select([Polars.col("a").list.to_struct])
|
588
588
|
# # =>
|
589
589
|
# # shape: (2, 1)
|
590
590
|
# # ┌────────────┐
|
@@ -617,7 +617,7 @@ module Polars
|
|
617
617
|
# @example
|
618
618
|
# df = Polars::DataFrame.new({"a" => [1, 8, 3], "b" => [4, 5, 2]})
|
619
619
|
# df.with_column(
|
620
|
-
# Polars.concat_list(["a", "b"]).
|
620
|
+
# Polars.concat_list(["a", "b"]).list.eval(Polars.element.rank).alias("rank")
|
621
621
|
# )
|
622
622
|
# # =>
|
623
623
|
# # shape: (3, 3)
|
@@ -1,9 +1,9 @@
|
|
1
1
|
module Polars
|
2
|
-
# Series.
|
2
|
+
# Series.list namespace.
|
3
3
|
class ListNameSpace
|
4
4
|
include ExprDispatch
|
5
5
|
|
6
|
-
self._accessor = "
|
6
|
+
self._accessor = "list"
|
7
7
|
|
8
8
|
# @private
|
9
9
|
def initialize(series)
|
@@ -16,7 +16,7 @@ module Polars
|
|
16
16
|
#
|
17
17
|
# @example
|
18
18
|
# s = Polars::Series.new([[1, 2, 3], [5]])
|
19
|
-
# s.
|
19
|
+
# s.list.lengths
|
20
20
|
# # =>
|
21
21
|
# # shape: (2,)
|
22
22
|
# # Series: '' [u32]
|
@@ -119,13 +119,13 @@ module Polars
|
|
119
119
|
#
|
120
120
|
# @example
|
121
121
|
# s = Polars::Series.new([["foo", "bar"], ["hello", "world"]])
|
122
|
-
# s.
|
122
|
+
# s.list.join("-")
|
123
123
|
# # =>
|
124
124
|
# # shape: (2,)
|
125
125
|
# # Series: '' [str]
|
126
126
|
# # [
|
127
|
-
# #
|
128
|
-
# #
|
127
|
+
# # "foo-bar"
|
128
|
+
# # "hello-world"
|
129
129
|
# # ]
|
130
130
|
def join(separator)
|
131
131
|
super
|
@@ -180,7 +180,7 @@ module Polars
|
|
180
180
|
#
|
181
181
|
# @example
|
182
182
|
# s = Polars::Series.new("a", [[1, 2, 3, 4], [10, 2, 1]])
|
183
|
-
# s.
|
183
|
+
# s.list.diff
|
184
184
|
# # =>
|
185
185
|
# # shape: (2,)
|
186
186
|
# # Series: 'a' [list[i64]]
|
@@ -201,7 +201,7 @@ module Polars
|
|
201
201
|
#
|
202
202
|
# @example
|
203
203
|
# s = Polars::Series.new("a", [[1, 2, 3, 4], [10, 2, 1]])
|
204
|
-
# s.
|
204
|
+
# s.list.shift
|
205
205
|
# # =>
|
206
206
|
# # shape: (2,)
|
207
207
|
# # Series: 'a' [list[i64]]
|
@@ -225,7 +225,7 @@ module Polars
|
|
225
225
|
#
|
226
226
|
# @example
|
227
227
|
# s = Polars::Series.new("a", [[1, 2, 3, 4], [10, 2, 1]])
|
228
|
-
# s.
|
228
|
+
# s.list.slice(1, 2)
|
229
229
|
# # =>
|
230
230
|
# # shape: (2,)
|
231
231
|
# # Series: 'a' [list[i64]]
|
@@ -246,7 +246,7 @@ module Polars
|
|
246
246
|
#
|
247
247
|
# @example
|
248
248
|
# s = Polars::Series.new("a", [[1, 2, 3, 4], [10, 2, 1]])
|
249
|
-
# s.
|
249
|
+
# s.list.head(2)
|
250
250
|
# # =>
|
251
251
|
# # shape: (2,)
|
252
252
|
# # Series: 'a' [list[i64]]
|
@@ -267,7 +267,7 @@ module Polars
|
|
267
267
|
#
|
268
268
|
# @example
|
269
269
|
# s = Polars::Series.new("a", [[1, 2, 3, 4], [10, 2, 1]])
|
270
|
-
# s.
|
270
|
+
# s.list.tail(2)
|
271
271
|
# # =>
|
272
272
|
# # shape: (2,)
|
273
273
|
# # Series: 'a' [list[i64]]
|
@@ -291,7 +291,7 @@ module Polars
|
|
291
291
|
#
|
292
292
|
# @example
|
293
293
|
# df = Polars::DataFrame.new({"a" => [[1, 2, 3], [1, 2]]})
|
294
|
-
# df.select([Polars.col("a").
|
294
|
+
# df.select([Polars.col("a").list.to_struct])
|
295
295
|
# # =>
|
296
296
|
# # shape: (2, 1)
|
297
297
|
# # ┌────────────┐
|
@@ -323,7 +323,7 @@ module Polars
|
|
323
323
|
# @example
|
324
324
|
# df = Polars::DataFrame.new({"a" => [1, 8, 3], "b" => [4, 5, 2]})
|
325
325
|
# df.with_column(
|
326
|
-
# Polars.concat_list(["a", "b"]).
|
326
|
+
# Polars.concat_list(["a", "b"]).list.eval(Polars.element.rank).alias("rank")
|
327
327
|
# )
|
328
328
|
# # =>
|
329
329
|
# # shape: (3, 3)
|
@@ -10,7 +10,8 @@ module Polars
|
|
10
10
|
period,
|
11
11
|
offset,
|
12
12
|
closed,
|
13
|
-
by
|
13
|
+
by,
|
14
|
+
check_sorted
|
14
15
|
)
|
15
16
|
period = Utils._timedelta_to_pl_duration(period)
|
16
17
|
offset = Utils._timedelta_to_pl_duration(offset)
|
@@ -21,12 +22,13 @@ module Polars
|
|
21
22
|
@offset = offset
|
22
23
|
@closed = closed
|
23
24
|
@by = by
|
25
|
+
@check_sorted = check_sorted
|
24
26
|
end
|
25
27
|
|
26
28
|
def agg(aggs)
|
27
29
|
@df.lazy
|
28
30
|
.groupby_rolling(
|
29
|
-
index_column: @time_column, period: @period, offset: @offset, closed: @closed, by: @by
|
31
|
+
index_column: @time_column, period: @period, offset: @offset, closed: @closed, by: @by, check_sorted: @check_sorted
|
30
32
|
)
|
31
33
|
.agg(aggs)
|
32
34
|
.collect(no_optimization: true, string_cache: false)
|