polars-df 0.7.0-x86_64-darwin → 0.9.0-x86_64-darwin
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +41 -0
- data/Cargo.lock +353 -237
- data/Cargo.toml +0 -3
- data/LICENSE-THIRD-PARTY.txt +4014 -3495
- data/LICENSE.txt +1 -1
- data/README.md +2 -2
- data/lib/polars/3.1/polars.bundle +0 -0
- data/lib/polars/3.2/polars.bundle +0 -0
- data/lib/polars/{3.0 → 3.3}/polars.bundle +0 -0
- data/lib/polars/array_expr.rb +449 -0
- data/lib/polars/array_name_space.rb +346 -0
- data/lib/polars/cat_expr.rb +24 -0
- data/lib/polars/cat_name_space.rb +75 -0
- data/lib/polars/config.rb +2 -2
- data/lib/polars/data_frame.rb +248 -108
- data/lib/polars/data_types.rb +195 -29
- data/lib/polars/date_time_expr.rb +41 -24
- data/lib/polars/date_time_name_space.rb +12 -12
- data/lib/polars/exceptions.rb +12 -1
- data/lib/polars/expr.rb +1080 -195
- data/lib/polars/functions/aggregation/horizontal.rb +246 -0
- data/lib/polars/functions/aggregation/vertical.rb +282 -0
- data/lib/polars/functions/as_datatype.rb +248 -0
- data/lib/polars/functions/col.rb +47 -0
- data/lib/polars/functions/eager.rb +182 -0
- data/lib/polars/functions/lazy.rb +1280 -0
- data/lib/polars/functions/len.rb +49 -0
- data/lib/polars/functions/lit.rb +35 -0
- data/lib/polars/functions/random.rb +16 -0
- data/lib/polars/functions/range/date_range.rb +103 -0
- data/lib/polars/functions/range/int_range.rb +51 -0
- data/lib/polars/functions/repeat.rb +144 -0
- data/lib/polars/functions/whenthen.rb +27 -0
- data/lib/polars/functions.rb +29 -416
- data/lib/polars/group_by.rb +3 -3
- data/lib/polars/io.rb +21 -28
- data/lib/polars/lazy_frame.rb +390 -76
- data/lib/polars/list_expr.rb +152 -6
- data/lib/polars/list_name_space.rb +102 -0
- data/lib/polars/meta_expr.rb +175 -7
- data/lib/polars/series.rb +557 -59
- data/lib/polars/sql_context.rb +1 -1
- data/lib/polars/string_cache.rb +75 -0
- data/lib/polars/string_expr.rb +412 -96
- data/lib/polars/string_name_space.rb +4 -4
- data/lib/polars/struct_expr.rb +1 -1
- data/lib/polars/struct_name_space.rb +1 -1
- data/lib/polars/testing.rb +507 -0
- data/lib/polars/utils.rb +64 -20
- data/lib/polars/version.rb +1 -1
- data/lib/polars.rb +15 -2
- metadata +36 -7
- data/lib/polars/lazy_functions.rb +0 -1197
data/lib/polars/expr.rb
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
module Polars
|
2
2
|
# Expressions that can be used in various contexts.
|
3
3
|
class Expr
|
4
|
+
# @private
|
5
|
+
NO_DEFAULT = Object.new
|
6
|
+
|
4
7
|
# @private
|
5
8
|
attr_accessor :_rbexpr
|
6
9
|
|
@@ -23,112 +26,106 @@ module Polars
|
|
23
26
|
#
|
24
27
|
# @return [Expr]
|
25
28
|
def ^(other)
|
26
|
-
|
29
|
+
_from_rbexpr(_rbexpr._xor(_to_rbexpr(other)))
|
27
30
|
end
|
28
31
|
|
29
32
|
# Bitwise AND.
|
30
33
|
#
|
31
34
|
# @return [Expr]
|
32
35
|
def &(other)
|
33
|
-
|
36
|
+
_from_rbexpr(_rbexpr._and(_to_rbexpr(other)))
|
34
37
|
end
|
35
38
|
|
36
39
|
# Bitwise OR.
|
37
40
|
#
|
38
41
|
# @return [Expr]
|
39
42
|
def |(other)
|
40
|
-
|
43
|
+
_from_rbexpr(_rbexpr._or(_to_rbexpr(other)))
|
41
44
|
end
|
42
45
|
|
43
46
|
# Performs addition.
|
44
47
|
#
|
45
48
|
# @return [Expr]
|
46
49
|
def +(other)
|
47
|
-
|
50
|
+
_from_rbexpr(_rbexpr + _to_rbexpr(other))
|
48
51
|
end
|
49
52
|
|
50
53
|
# Performs subtraction.
|
51
54
|
#
|
52
55
|
# @return [Expr]
|
53
56
|
def -(other)
|
54
|
-
|
57
|
+
_from_rbexpr(_rbexpr - _to_rbexpr(other))
|
55
58
|
end
|
56
59
|
|
57
60
|
# Performs multiplication.
|
58
61
|
#
|
59
62
|
# @return [Expr]
|
60
63
|
def *(other)
|
61
|
-
|
64
|
+
_from_rbexpr(_rbexpr * _to_rbexpr(other))
|
62
65
|
end
|
63
66
|
|
64
67
|
# Performs division.
|
65
68
|
#
|
66
69
|
# @return [Expr]
|
67
70
|
def /(other)
|
68
|
-
|
69
|
-
end
|
70
|
-
|
71
|
-
# Performs floor division.
|
72
|
-
#
|
73
|
-
# @return [Expr]
|
74
|
-
def floordiv(other)
|
75
|
-
wrap_expr(_rbexpr.floordiv(_to_rbexpr(other)))
|
71
|
+
_from_rbexpr(_rbexpr / _to_rbexpr(other))
|
76
72
|
end
|
77
73
|
|
78
74
|
# Returns the modulo.
|
79
75
|
#
|
80
76
|
# @return [Expr]
|
81
77
|
def %(other)
|
82
|
-
|
78
|
+
_from_rbexpr(_rbexpr % _to_rbexpr(other))
|
83
79
|
end
|
84
80
|
|
85
81
|
# Raises to the power of exponent.
|
86
82
|
#
|
87
83
|
# @return [Expr]
|
88
84
|
def **(power)
|
89
|
-
|
85
|
+
exponent = Utils.expr_to_lit_or_expr(power)
|
86
|
+
_from_rbexpr(_rbexpr.pow(exponent._rbexpr))
|
90
87
|
end
|
91
88
|
|
92
89
|
# Greater than or equal.
|
93
90
|
#
|
94
91
|
# @return [Expr]
|
95
92
|
def >=(other)
|
96
|
-
|
93
|
+
_from_rbexpr(_rbexpr.gt_eq(_to_expr(other)._rbexpr))
|
97
94
|
end
|
98
95
|
|
99
96
|
# Less than or equal.
|
100
97
|
#
|
101
98
|
# @return [Expr]
|
102
99
|
def <=(other)
|
103
|
-
|
100
|
+
_from_rbexpr(_rbexpr.lt_eq(_to_expr(other)._rbexpr))
|
104
101
|
end
|
105
102
|
|
106
103
|
# Equal.
|
107
104
|
#
|
108
105
|
# @return [Expr]
|
109
106
|
def ==(other)
|
110
|
-
|
107
|
+
_from_rbexpr(_rbexpr.eq(_to_expr(other)._rbexpr))
|
111
108
|
end
|
112
109
|
|
113
110
|
# Not equal.
|
114
111
|
#
|
115
112
|
# @return [Expr]
|
116
113
|
def !=(other)
|
117
|
-
|
114
|
+
_from_rbexpr(_rbexpr.neq(_to_expr(other)._rbexpr))
|
118
115
|
end
|
119
116
|
|
120
117
|
# Less than.
|
121
118
|
#
|
122
119
|
# @return [Expr]
|
123
120
|
def <(other)
|
124
|
-
|
121
|
+
_from_rbexpr(_rbexpr.lt(_to_expr(other)._rbexpr))
|
125
122
|
end
|
126
123
|
|
127
124
|
# Greater than.
|
128
125
|
#
|
129
126
|
# @return [Expr]
|
130
127
|
def >(other)
|
131
|
-
|
128
|
+
_from_rbexpr(_rbexpr.gt(_to_expr(other)._rbexpr))
|
132
129
|
end
|
133
130
|
|
134
131
|
# Performs boolean not.
|
@@ -142,7 +139,7 @@ module Polars
|
|
142
139
|
#
|
143
140
|
# @return [Expr]
|
144
141
|
def -@
|
145
|
-
|
142
|
+
_from_rbexpr(_rbexpr.neg)
|
146
143
|
end
|
147
144
|
|
148
145
|
# Cast to physical representation of the logical dtype.
|
@@ -179,7 +176,7 @@ module Polars
|
|
179
176
|
# # │ a ┆ 0 │
|
180
177
|
# # └──────┴───────────────┘
|
181
178
|
def to_physical
|
182
|
-
|
179
|
+
_from_rbexpr(_rbexpr.to_physical)
|
183
180
|
end
|
184
181
|
|
185
182
|
# Check if any boolean value in a Boolean column is `true`.
|
@@ -199,7 +196,7 @@ module Polars
|
|
199
196
|
# # │ true ┆ false │
|
200
197
|
# # └──────┴───────┘
|
201
198
|
def any(drop_nulls: true)
|
202
|
-
|
199
|
+
_from_rbexpr(_rbexpr.any(drop_nulls))
|
203
200
|
end
|
204
201
|
|
205
202
|
# Check if all boolean values in a Boolean column are `true`.
|
@@ -224,7 +221,7 @@ module Polars
|
|
224
221
|
# # │ true ┆ false ┆ false │
|
225
222
|
# # └──────┴───────┴───────┘
|
226
223
|
def all(drop_nulls: true)
|
227
|
-
|
224
|
+
_from_rbexpr(_rbexpr.all(drop_nulls))
|
228
225
|
end
|
229
226
|
|
230
227
|
# Compute the square root of the elements.
|
@@ -290,7 +287,7 @@ module Polars
|
|
290
287
|
# # │ 54.59815 │
|
291
288
|
# # └──────────┘
|
292
289
|
def exp
|
293
|
-
|
290
|
+
_from_rbexpr(_rbexpr.exp)
|
294
291
|
end
|
295
292
|
|
296
293
|
# Rename the output of an expression.
|
@@ -325,7 +322,7 @@ module Polars
|
|
325
322
|
# # │ 3 ┆ null │
|
326
323
|
# # └─────┴──────┘
|
327
324
|
def alias(name)
|
328
|
-
|
325
|
+
_from_rbexpr(_rbexpr._alias(name))
|
329
326
|
end
|
330
327
|
|
331
328
|
# TODO support symbols for exclude
|
@@ -366,22 +363,22 @@ module Polars
|
|
366
363
|
# # │ 3 ┆ 1.5 │
|
367
364
|
# # └─────┴──────┘
|
368
365
|
def exclude(columns)
|
369
|
-
if columns.is_a?(String)
|
366
|
+
if columns.is_a?(::String)
|
370
367
|
columns = [columns]
|
371
|
-
return
|
368
|
+
return _from_rbexpr(_rbexpr.exclude(columns))
|
372
369
|
elsif !columns.is_a?(::Array)
|
373
370
|
columns = [columns]
|
374
|
-
return
|
371
|
+
return _from_rbexpr(_rbexpr.exclude_dtype(columns))
|
375
372
|
end
|
376
373
|
|
377
|
-
if !columns.all? { |a| a.is_a?(String) } || !columns.all? { |a| Utils.is_polars_dtype(a) }
|
374
|
+
if !columns.all? { |a| a.is_a?(::String) } || !columns.all? { |a| Utils.is_polars_dtype(a) }
|
378
375
|
raise ArgumentError, "input should be all string or all DataType"
|
379
376
|
end
|
380
377
|
|
381
|
-
if columns[0].is_a?(String)
|
382
|
-
|
378
|
+
if columns[0].is_a?(::String)
|
379
|
+
_from_rbexpr(_rbexpr.exclude(columns))
|
383
380
|
else
|
384
|
-
|
381
|
+
_from_rbexpr(_rbexpr.exclude_dtype(columns))
|
385
382
|
end
|
386
383
|
end
|
387
384
|
|
@@ -490,8 +487,9 @@ module Polars
|
|
490
487
|
# # │ true │
|
491
488
|
# # └───────┘
|
492
489
|
def is_not
|
493
|
-
|
490
|
+
_from_rbexpr(_rbexpr.not_)
|
494
491
|
end
|
492
|
+
alias_method :not_, :is_not
|
495
493
|
|
496
494
|
# Returns a boolean Series indicating which values are null.
|
497
495
|
#
|
@@ -519,7 +517,7 @@ module Polars
|
|
519
517
|
# # │ 5 ┆ 5.0 ┆ false ┆ false │
|
520
518
|
# # └──────┴─────┴──────────┴──────────┘
|
521
519
|
def is_null
|
522
|
-
|
520
|
+
_from_rbexpr(_rbexpr.is_null)
|
523
521
|
end
|
524
522
|
|
525
523
|
# Returns a boolean Series indicating which values are not null.
|
@@ -548,7 +546,7 @@ module Polars
|
|
548
546
|
# # │ 5 ┆ 5.0 ┆ true ┆ true │
|
549
547
|
# # └──────┴─────┴────────────┴────────────┘
|
550
548
|
def is_not_null
|
551
|
-
|
549
|
+
_from_rbexpr(_rbexpr.is_not_null)
|
552
550
|
end
|
553
551
|
|
554
552
|
# Returns a boolean Series indicating which values are finite.
|
@@ -574,7 +572,7 @@ module Polars
|
|
574
572
|
# # │ true ┆ false │
|
575
573
|
# # └──────┴───────┘
|
576
574
|
def is_finite
|
577
|
-
|
575
|
+
_from_rbexpr(_rbexpr.is_finite)
|
578
576
|
end
|
579
577
|
|
580
578
|
# Returns a boolean Series indicating which values are infinite.
|
@@ -600,7 +598,7 @@ module Polars
|
|
600
598
|
# # │ false ┆ true │
|
601
599
|
# # └───────┴───────┘
|
602
600
|
def is_infinite
|
603
|
-
|
601
|
+
_from_rbexpr(_rbexpr.is_infinite)
|
604
602
|
end
|
605
603
|
|
606
604
|
# Returns a boolean Series indicating which values are NaN.
|
@@ -633,7 +631,7 @@ module Polars
|
|
633
631
|
# # │ 5 ┆ 5.0 ┆ false │
|
634
632
|
# # └──────┴─────┴─────────┘
|
635
633
|
def is_nan
|
636
|
-
|
634
|
+
_from_rbexpr(_rbexpr.is_nan)
|
637
635
|
end
|
638
636
|
|
639
637
|
# Returns a boolean Series indicating which values are not NaN.
|
@@ -666,7 +664,7 @@ module Polars
|
|
666
664
|
# # │ 5 ┆ 5.0 ┆ true │
|
667
665
|
# # └──────┴─────┴──────────────┘
|
668
666
|
def is_not_nan
|
669
|
-
|
667
|
+
_from_rbexpr(_rbexpr.is_not_nan)
|
670
668
|
end
|
671
669
|
|
672
670
|
# Get the group indexes of the group by operation.
|
@@ -701,7 +699,7 @@ module Polars
|
|
701
699
|
# # │ two ┆ [3, 4, 5] │
|
702
700
|
# # └───────┴───────────┘
|
703
701
|
def agg_groups
|
704
|
-
|
702
|
+
_from_rbexpr(_rbexpr.agg_groups)
|
705
703
|
end
|
706
704
|
|
707
705
|
# Count the number of values in this expression.
|
@@ -718,16 +716,14 @@ module Polars
|
|
718
716
|
# # │ --- ┆ --- │
|
719
717
|
# # │ u32 ┆ u32 │
|
720
718
|
# # ╞═════╪═════╡
|
721
|
-
# # │ 3 ┆
|
719
|
+
# # │ 3 ┆ 2 │
|
722
720
|
# # └─────┴─────┘
|
723
721
|
def count
|
724
|
-
|
722
|
+
_from_rbexpr(_rbexpr.count)
|
725
723
|
end
|
726
724
|
|
727
725
|
# Count the number of values in this expression.
|
728
726
|
#
|
729
|
-
# Alias for {#count}.
|
730
|
-
#
|
731
727
|
# @return [Expr]
|
732
728
|
#
|
733
729
|
# @example
|
@@ -743,8 +739,9 @@ module Polars
|
|
743
739
|
# # │ 3 ┆ 3 │
|
744
740
|
# # └─────┴─────┘
|
745
741
|
def len
|
746
|
-
|
742
|
+
_from_rbexpr(_rbexpr.len)
|
747
743
|
end
|
744
|
+
alias_method :length, :len
|
748
745
|
|
749
746
|
# Get a slice of this expression.
|
750
747
|
#
|
@@ -781,7 +778,7 @@ module Polars
|
|
781
778
|
if !length.is_a?(Expr)
|
782
779
|
length = Polars.lit(length)
|
783
780
|
end
|
784
|
-
|
781
|
+
_from_rbexpr(_rbexpr.slice(offset._rbexpr, length._rbexpr))
|
785
782
|
end
|
786
783
|
|
787
784
|
# Append expressions.
|
@@ -815,7 +812,7 @@ module Polars
|
|
815
812
|
# # └─────┴──────┘
|
816
813
|
def append(other, upcast: true)
|
817
814
|
other = Utils.expr_to_lit_or_expr(other)
|
818
|
-
|
815
|
+
_from_rbexpr(_rbexpr.append(other._rbexpr, upcast))
|
819
816
|
end
|
820
817
|
|
821
818
|
# Create a single chunk of memory for this Series.
|
@@ -840,7 +837,7 @@ module Polars
|
|
840
837
|
# # │ 2 │
|
841
838
|
# # └────────┘
|
842
839
|
def rechunk
|
843
|
-
|
840
|
+
_from_rbexpr(_rbexpr.rechunk)
|
844
841
|
end
|
845
842
|
|
846
843
|
# Drop null values.
|
@@ -867,7 +864,7 @@ module Polars
|
|
867
864
|
# # │ NaN │
|
868
865
|
# # └─────┘
|
869
866
|
def drop_nulls
|
870
|
-
|
867
|
+
_from_rbexpr(_rbexpr.drop_nulls)
|
871
868
|
end
|
872
869
|
|
873
870
|
# Drop floating point NaN values.
|
@@ -894,7 +891,7 @@ module Polars
|
|
894
891
|
# # │ 4.0 │
|
895
892
|
# # └──────┘
|
896
893
|
def drop_nans
|
897
|
-
|
894
|
+
_from_rbexpr(_rbexpr.drop_nans)
|
898
895
|
end
|
899
896
|
|
900
897
|
# Get an array with the cumulative sum computed at every element.
|
@@ -929,7 +926,7 @@ module Polars
|
|
929
926
|
# # │ 10 ┆ 4 │
|
930
927
|
# # └─────┴───────────┘
|
931
928
|
def cum_sum(reverse: false)
|
932
|
-
|
929
|
+
_from_rbexpr(_rbexpr.cum_sum(reverse))
|
933
930
|
end
|
934
931
|
alias_method :cumsum, :cum_sum
|
935
932
|
|
@@ -965,7 +962,7 @@ module Polars
|
|
965
962
|
# # │ 24 ┆ 4 │
|
966
963
|
# # └─────┴───────────┘
|
967
964
|
def cum_prod(reverse: false)
|
968
|
-
|
965
|
+
_from_rbexpr(_rbexpr.cum_prod(reverse))
|
969
966
|
end
|
970
967
|
alias_method :cumprod, :cum_prod
|
971
968
|
|
@@ -997,7 +994,7 @@ module Polars
|
|
997
994
|
# # │ 1 ┆ 4 │
|
998
995
|
# # └─────┴───────────┘
|
999
996
|
def cum_min(reverse: false)
|
1000
|
-
|
997
|
+
_from_rbexpr(_rbexpr.cum_min(reverse))
|
1001
998
|
end
|
1002
999
|
alias_method :cummin, :cum_min
|
1003
1000
|
|
@@ -1029,7 +1026,7 @@ module Polars
|
|
1029
1026
|
# # │ 4 ┆ 4 │
|
1030
1027
|
# # └─────┴───────────┘
|
1031
1028
|
def cum_max(reverse: false)
|
1032
|
-
|
1029
|
+
_from_rbexpr(_rbexpr.cum_max(reverse))
|
1033
1030
|
end
|
1034
1031
|
alias_method :cummax, :cum_max
|
1035
1032
|
|
@@ -1043,27 +1040,27 @@ module Polars
|
|
1043
1040
|
# @return [Expr]
|
1044
1041
|
#
|
1045
1042
|
# @example
|
1046
|
-
# df = Polars::DataFrame.new({"a" => [
|
1047
|
-
# df.
|
1043
|
+
# df = Polars::DataFrame.new({"a" => ["x", "k", nil, "d"]})
|
1044
|
+
# df.with_columns(
|
1048
1045
|
# [
|
1049
|
-
# Polars.col("a").cum_count,
|
1050
|
-
# Polars.col("a").cum_count(reverse: true).alias("
|
1046
|
+
# Polars.col("a").cum_count.alias("cum_count"),
|
1047
|
+
# Polars.col("a").cum_count(reverse: true).alias("cum_count_reverse")
|
1051
1048
|
# ]
|
1052
1049
|
# )
|
1053
1050
|
# # =>
|
1054
|
-
# # shape: (4,
|
1055
|
-
# #
|
1056
|
-
# # │ a
|
1057
|
-
# # │ --- ┆ ---
|
1058
|
-
# # │ u32
|
1059
|
-
# #
|
1060
|
-
# # │
|
1061
|
-
# # │
|
1062
|
-
# # │ 2
|
1063
|
-
# # │ 3
|
1064
|
-
# #
|
1051
|
+
# # shape: (4, 3)
|
1052
|
+
# # ┌──────┬───────────┬───────────────────┐
|
1053
|
+
# # │ a ┆ cum_count ┆ cum_count_reverse │
|
1054
|
+
# # │ --- ┆ --- ┆ --- │
|
1055
|
+
# # │ str ┆ u32 ┆ u32 │
|
1056
|
+
# # ╞══════╪═══════════╪═══════════════════╡
|
1057
|
+
# # │ x ┆ 1 ┆ 3 │
|
1058
|
+
# # │ k ┆ 2 ┆ 2 │
|
1059
|
+
# # │ null ┆ 2 ┆ 1 │
|
1060
|
+
# # │ d ┆ 3 ┆ 1 │
|
1061
|
+
# # └──────┴───────────┴───────────────────┘
|
1065
1062
|
def cum_count(reverse: false)
|
1066
|
-
|
1063
|
+
_from_rbexpr(_rbexpr.cum_count(reverse))
|
1067
1064
|
end
|
1068
1065
|
alias_method :cumcount, :cum_count
|
1069
1066
|
|
@@ -1089,7 +1086,7 @@ module Polars
|
|
1089
1086
|
# # │ 1.0 │
|
1090
1087
|
# # └─────┘
|
1091
1088
|
def floor
|
1092
|
-
|
1089
|
+
_from_rbexpr(_rbexpr.floor)
|
1093
1090
|
end
|
1094
1091
|
|
1095
1092
|
# Rounds up to the nearest integer value.
|
@@ -1114,7 +1111,7 @@ module Polars
|
|
1114
1111
|
# # │ 2.0 │
|
1115
1112
|
# # └─────┘
|
1116
1113
|
def ceil
|
1117
|
-
|
1114
|
+
_from_rbexpr(_rbexpr.ceil)
|
1118
1115
|
end
|
1119
1116
|
|
1120
1117
|
# Round underlying floating point data by `decimals` digits.
|
@@ -1140,7 +1137,7 @@ module Polars
|
|
1140
1137
|
# # │ 1.2 │
|
1141
1138
|
# # └─────┘
|
1142
1139
|
def round(decimals = 0)
|
1143
|
-
|
1140
|
+
_from_rbexpr(_rbexpr.round(decimals))
|
1144
1141
|
end
|
1145
1142
|
|
1146
1143
|
# Compute the dot/inner product between two Expressions.
|
@@ -1169,7 +1166,7 @@ module Polars
|
|
1169
1166
|
# # └─────┘
|
1170
1167
|
def dot(other)
|
1171
1168
|
other = Utils.expr_to_lit_or_expr(other, str_to_lit: false)
|
1172
|
-
|
1169
|
+
_from_rbexpr(_rbexpr.dot(other._rbexpr))
|
1173
1170
|
end
|
1174
1171
|
|
1175
1172
|
# Compute the most occurring value(s).
|
@@ -1197,7 +1194,7 @@ module Polars
|
|
1197
1194
|
# # │ 1 ┆ 2 │
|
1198
1195
|
# # └─────┴─────┘
|
1199
1196
|
def mode
|
1200
|
-
|
1197
|
+
_from_rbexpr(_rbexpr.mode)
|
1201
1198
|
end
|
1202
1199
|
|
1203
1200
|
# Cast between data types.
|
@@ -1236,7 +1233,7 @@ module Polars
|
|
1236
1233
|
# # └─────┴─────┘
|
1237
1234
|
def cast(dtype, strict: true)
|
1238
1235
|
dtype = Utils.rb_type_to_dtype(dtype)
|
1239
|
-
|
1236
|
+
_from_rbexpr(_rbexpr.cast(dtype, strict))
|
1240
1237
|
end
|
1241
1238
|
|
1242
1239
|
# Sort this column. In projection/ selection context the whole column is sorted.
|
@@ -1311,7 +1308,7 @@ module Polars
|
|
1311
1308
|
# # │ one ┆ [1, 2, 98] │
|
1312
1309
|
# # └───────┴────────────┘
|
1313
1310
|
def sort(reverse: false, nulls_last: false)
|
1314
|
-
|
1311
|
+
_from_rbexpr(_rbexpr.sort_with(reverse, nulls_last))
|
1315
1312
|
end
|
1316
1313
|
|
1317
1314
|
# Return the `k` largest elements.
|
@@ -1350,7 +1347,7 @@ module Polars
|
|
1350
1347
|
# # └───────┴──────────┘
|
1351
1348
|
def top_k(k: 5)
|
1352
1349
|
k = Utils.parse_as_expression(k)
|
1353
|
-
|
1350
|
+
_from_rbexpr(_rbexpr.top_k(k))
|
1354
1351
|
end
|
1355
1352
|
|
1356
1353
|
# Return the `k` smallest elements.
|
@@ -1389,7 +1386,7 @@ module Polars
|
|
1389
1386
|
# # └───────┴──────────┘
|
1390
1387
|
def bottom_k(k: 5)
|
1391
1388
|
k = Utils.parse_as_expression(k)
|
1392
|
-
|
1389
|
+
_from_rbexpr(_rbexpr.bottom_k(k))
|
1393
1390
|
end
|
1394
1391
|
|
1395
1392
|
# Get the index values that would sort this column.
|
@@ -1420,7 +1417,7 @@ module Polars
|
|
1420
1417
|
# # │ 2 │
|
1421
1418
|
# # └─────┘
|
1422
1419
|
def arg_sort(reverse: false, nulls_last: false)
|
1423
|
-
|
1420
|
+
_from_rbexpr(_rbexpr.arg_sort(reverse, nulls_last))
|
1424
1421
|
end
|
1425
1422
|
|
1426
1423
|
# Get the index of the maximal value.
|
@@ -1444,7 +1441,7 @@ module Polars
|
|
1444
1441
|
# # │ 2 │
|
1445
1442
|
# # └─────┘
|
1446
1443
|
def arg_max
|
1447
|
-
|
1444
|
+
_from_rbexpr(_rbexpr.arg_max)
|
1448
1445
|
end
|
1449
1446
|
|
1450
1447
|
# Get the index of the minimal value.
|
@@ -1468,7 +1465,7 @@ module Polars
|
|
1468
1465
|
# # │ 1 │
|
1469
1466
|
# # └─────┘
|
1470
1467
|
def arg_min
|
1471
|
-
|
1468
|
+
_from_rbexpr(_rbexpr.arg_min)
|
1472
1469
|
end
|
1473
1470
|
|
1474
1471
|
# Find indices where elements should be inserted to maintain order.
|
@@ -1502,7 +1499,7 @@ module Polars
|
|
1502
1499
|
# # └──────┴───────┴─────┘
|
1503
1500
|
def search_sorted(element, side: "any")
|
1504
1501
|
element = Utils.expr_to_lit_or_expr(element, str_to_lit: false)
|
1505
|
-
|
1502
|
+
_from_rbexpr(_rbexpr.search_sorted(element._rbexpr, side))
|
1506
1503
|
end
|
1507
1504
|
|
1508
1505
|
# Sort this column by the ordering of another column, or multiple other columns.
|
@@ -1556,7 +1553,7 @@ module Polars
|
|
1556
1553
|
end
|
1557
1554
|
by = Utils.selection_to_rbexpr_list(by)
|
1558
1555
|
|
1559
|
-
|
1556
|
+
_from_rbexpr(_rbexpr.sort_by(by, reverse))
|
1560
1557
|
end
|
1561
1558
|
|
1562
1559
|
# Take values by index.
|
@@ -1597,7 +1594,7 @@ module Polars
|
|
1597
1594
|
else
|
1598
1595
|
indices_lit = Utils.expr_to_lit_or_expr(indices, str_to_lit: false)
|
1599
1596
|
end
|
1600
|
-
|
1597
|
+
_from_rbexpr(_rbexpr.gather(indices_lit._rbexpr))
|
1601
1598
|
end
|
1602
1599
|
alias_method :take, :gather
|
1603
1600
|
|
@@ -1630,7 +1627,7 @@ module Polars
|
|
1630
1627
|
fill_value = Utils.parse_as_expression(fill_value, str_as_lit: true)
|
1631
1628
|
end
|
1632
1629
|
n = Utils.parse_as_expression(n)
|
1633
|
-
|
1630
|
+
_from_rbexpr(_rbexpr.shift(n, fill_value))
|
1634
1631
|
end
|
1635
1632
|
|
1636
1633
|
# Shift the values by a given period and fill the resulting null values.
|
@@ -1733,9 +1730,9 @@ module Polars
|
|
1733
1730
|
|
1734
1731
|
if !value.nil?
|
1735
1732
|
value = Utils.expr_to_lit_or_expr(value, str_to_lit: true)
|
1736
|
-
|
1733
|
+
_from_rbexpr(_rbexpr.fill_null(value._rbexpr))
|
1737
1734
|
else
|
1738
|
-
|
1735
|
+
_from_rbexpr(_rbexpr.fill_null_with_strategy(strategy, limit))
|
1739
1736
|
end
|
1740
1737
|
end
|
1741
1738
|
|
@@ -1764,7 +1761,7 @@ module Polars
|
|
1764
1761
|
# # └──────┴──────┘
|
1765
1762
|
def fill_nan(fill_value)
|
1766
1763
|
fill_value = Utils.expr_to_lit_or_expr(fill_value, str_to_lit: true)
|
1767
|
-
|
1764
|
+
_from_rbexpr(_rbexpr.fill_nan(fill_value._rbexpr))
|
1768
1765
|
end
|
1769
1766
|
|
1770
1767
|
# Fill missing values with the latest seen values.
|
@@ -1794,7 +1791,7 @@ module Polars
|
|
1794
1791
|
# # │ 2 ┆ 6 │
|
1795
1792
|
# # └─────┴─────┘
|
1796
1793
|
def forward_fill(limit: nil)
|
1797
|
-
|
1794
|
+
_from_rbexpr(_rbexpr.forward_fill(limit))
|
1798
1795
|
end
|
1799
1796
|
|
1800
1797
|
# Fill missing values with the next to be seen values.
|
@@ -1824,14 +1821,14 @@ module Polars
|
|
1824
1821
|
# # │ null ┆ 6 │
|
1825
1822
|
# # └──────┴─────┘
|
1826
1823
|
def backward_fill(limit: nil)
|
1827
|
-
|
1824
|
+
_from_rbexpr(_rbexpr.backward_fill(limit))
|
1828
1825
|
end
|
1829
1826
|
|
1830
1827
|
# Reverse the selection.
|
1831
1828
|
#
|
1832
1829
|
# @return [Expr]
|
1833
1830
|
def reverse
|
1834
|
-
|
1831
|
+
_from_rbexpr(_rbexpr.reverse)
|
1835
1832
|
end
|
1836
1833
|
|
1837
1834
|
# Get standard deviation.
|
@@ -1854,7 +1851,7 @@ module Polars
|
|
1854
1851
|
# # │ 1.0 │
|
1855
1852
|
# # └─────┘
|
1856
1853
|
def std(ddof: 1)
|
1857
|
-
|
1854
|
+
_from_rbexpr(_rbexpr.std(ddof))
|
1858
1855
|
end
|
1859
1856
|
|
1860
1857
|
# Get variance.
|
@@ -1877,7 +1874,7 @@ module Polars
|
|
1877
1874
|
# # │ 1.0 │
|
1878
1875
|
# # └─────┘
|
1879
1876
|
def var(ddof: 1)
|
1880
|
-
|
1877
|
+
_from_rbexpr(_rbexpr.var(ddof))
|
1881
1878
|
end
|
1882
1879
|
|
1883
1880
|
# Get maximum value.
|
@@ -1897,7 +1894,7 @@ module Polars
|
|
1897
1894
|
# # │ 1.0 │
|
1898
1895
|
# # └─────┘
|
1899
1896
|
def max
|
1900
|
-
|
1897
|
+
_from_rbexpr(_rbexpr.max)
|
1901
1898
|
end
|
1902
1899
|
|
1903
1900
|
# Get minimum value.
|
@@ -1917,7 +1914,7 @@ module Polars
|
|
1917
1914
|
# # │ -1.0 │
|
1918
1915
|
# # └──────┘
|
1919
1916
|
def min
|
1920
|
-
|
1917
|
+
_from_rbexpr(_rbexpr.min)
|
1921
1918
|
end
|
1922
1919
|
|
1923
1920
|
# Get maximum value, but propagate/poison encountered NaN values.
|
@@ -1937,7 +1934,7 @@ module Polars
|
|
1937
1934
|
# # │ NaN │
|
1938
1935
|
# # └─────┘
|
1939
1936
|
def nan_max
|
1940
|
-
|
1937
|
+
_from_rbexpr(_rbexpr.nan_max)
|
1941
1938
|
end
|
1942
1939
|
|
1943
1940
|
# Get minimum value, but propagate/poison encountered NaN values.
|
@@ -1957,7 +1954,7 @@ module Polars
|
|
1957
1954
|
# # │ NaN │
|
1958
1955
|
# # └─────┘
|
1959
1956
|
def nan_min
|
1960
|
-
|
1957
|
+
_from_rbexpr(_rbexpr.nan_min)
|
1961
1958
|
end
|
1962
1959
|
|
1963
1960
|
# Get sum value.
|
@@ -1981,7 +1978,7 @@ module Polars
|
|
1981
1978
|
# # │ 0 │
|
1982
1979
|
# # └─────┘
|
1983
1980
|
def sum
|
1984
|
-
|
1981
|
+
_from_rbexpr(_rbexpr.sum)
|
1985
1982
|
end
|
1986
1983
|
|
1987
1984
|
# Get mean value.
|
@@ -2001,7 +1998,7 @@ module Polars
|
|
2001
1998
|
# # │ 0.0 │
|
2002
1999
|
# # └─────┘
|
2003
2000
|
def mean
|
2004
|
-
|
2001
|
+
_from_rbexpr(_rbexpr.mean)
|
2005
2002
|
end
|
2006
2003
|
|
2007
2004
|
# Get median value using linear interpolation.
|
@@ -2021,7 +2018,7 @@ module Polars
|
|
2021
2018
|
# # │ 0.0 │
|
2022
2019
|
# # └─────┘
|
2023
2020
|
def median
|
2024
|
-
|
2021
|
+
_from_rbexpr(_rbexpr.median)
|
2025
2022
|
end
|
2026
2023
|
|
2027
2024
|
# Compute the product of an expression.
|
@@ -2041,7 +2038,7 @@ module Polars
|
|
2041
2038
|
# # │ 6 │
|
2042
2039
|
# # └─────┘
|
2043
2040
|
def product
|
2044
|
-
|
2041
|
+
_from_rbexpr(_rbexpr.product)
|
2045
2042
|
end
|
2046
2043
|
|
2047
2044
|
# Count unique values.
|
@@ -2061,7 +2058,7 @@ module Polars
|
|
2061
2058
|
# # │ 2 │
|
2062
2059
|
# # └─────┘
|
2063
2060
|
def n_unique
|
2064
|
-
|
2061
|
+
_from_rbexpr(_rbexpr.n_unique)
|
2065
2062
|
end
|
2066
2063
|
|
2067
2064
|
# Approx count unique values.
|
@@ -2072,7 +2069,7 @@ module Polars
|
|
2072
2069
|
#
|
2073
2070
|
# @example
|
2074
2071
|
# df = Polars::DataFrame.new({"a" => [1, 1, 2]})
|
2075
|
-
# df.select(Polars.col("a").
|
2072
|
+
# df.select(Polars.col("a").approx_n_unique)
|
2076
2073
|
# # =>
|
2077
2074
|
# # shape: (1, 1)
|
2078
2075
|
# # ┌─────┐
|
@@ -2082,9 +2079,10 @@ module Polars
|
|
2082
2079
|
# # ╞═════╡
|
2083
2080
|
# # │ 2 │
|
2084
2081
|
# # └─────┘
|
2085
|
-
def
|
2086
|
-
|
2082
|
+
def approx_n_unique
|
2083
|
+
_from_rbexpr(_rbexpr.approx_n_unique)
|
2087
2084
|
end
|
2085
|
+
alias_method :approx_unique, :approx_n_unique
|
2088
2086
|
|
2089
2087
|
# Count null values.
|
2090
2088
|
#
|
@@ -2108,7 +2106,7 @@ module Polars
|
|
2108
2106
|
# # │ 2 ┆ 0 │
|
2109
2107
|
# # └─────┴─────┘
|
2110
2108
|
def null_count
|
2111
|
-
|
2109
|
+
_from_rbexpr(_rbexpr.null_count)
|
2112
2110
|
end
|
2113
2111
|
|
2114
2112
|
# Get index of first unique value.
|
@@ -2148,7 +2146,7 @@ module Polars
|
|
2148
2146
|
# # │ 1 │
|
2149
2147
|
# # └─────┘
|
2150
2148
|
def arg_unique
|
2151
|
-
|
2149
|
+
_from_rbexpr(_rbexpr.arg_unique)
|
2152
2150
|
end
|
2153
2151
|
|
2154
2152
|
# Get unique values of this expression.
|
@@ -2173,9 +2171,9 @@ module Polars
|
|
2173
2171
|
# # └─────┘
|
2174
2172
|
def unique(maintain_order: false)
|
2175
2173
|
if maintain_order
|
2176
|
-
|
2174
|
+
_from_rbexpr(_rbexpr.unique_stable)
|
2177
2175
|
else
|
2178
|
-
|
2176
|
+
_from_rbexpr(_rbexpr.unique)
|
2179
2177
|
end
|
2180
2178
|
end
|
2181
2179
|
|
@@ -2196,7 +2194,7 @@ module Polars
|
|
2196
2194
|
# # │ 1 │
|
2197
2195
|
# # └─────┘
|
2198
2196
|
def first
|
2199
|
-
|
2197
|
+
_from_rbexpr(_rbexpr.first)
|
2200
2198
|
end
|
2201
2199
|
|
2202
2200
|
# Get the last value.
|
@@ -2216,7 +2214,7 @@ module Polars
|
|
2216
2214
|
# # │ 2 │
|
2217
2215
|
# # └─────┘
|
2218
2216
|
def last
|
2219
|
-
|
2217
|
+
_from_rbexpr(_rbexpr.last)
|
2220
2218
|
end
|
2221
2219
|
|
2222
2220
|
# Apply window function over a subgroup.
|
@@ -2280,7 +2278,7 @@ module Polars
|
|
2280
2278
|
# # └────────┘
|
2281
2279
|
def over(expr)
|
2282
2280
|
rbexprs = Utils.selection_to_rbexpr_list(expr)
|
2283
|
-
|
2281
|
+
_from_rbexpr(_rbexpr.over(rbexprs))
|
2284
2282
|
end
|
2285
2283
|
|
2286
2284
|
# Get mask of unique values.
|
@@ -2302,7 +2300,7 @@ module Polars
|
|
2302
2300
|
# # │ true │
|
2303
2301
|
# # └───────┘
|
2304
2302
|
def is_unique
|
2305
|
-
|
2303
|
+
_from_rbexpr(_rbexpr.is_unique)
|
2306
2304
|
end
|
2307
2305
|
|
2308
2306
|
# Get a mask of the first unique value.
|
@@ -2330,7 +2328,7 @@ module Polars
|
|
2330
2328
|
# # │ 5 ┆ true │
|
2331
2329
|
# # └─────┴──────────┘
|
2332
2330
|
def is_first_distinct
|
2333
|
-
|
2331
|
+
_from_rbexpr(_rbexpr.is_first_distinct)
|
2334
2332
|
end
|
2335
2333
|
alias_method :is_first, :is_first_distinct
|
2336
2334
|
|
@@ -2353,7 +2351,7 @@ module Polars
|
|
2353
2351
|
# # │ false │
|
2354
2352
|
# # └───────┘
|
2355
2353
|
def is_duplicated
|
2356
|
-
|
2354
|
+
_from_rbexpr(_rbexpr.is_duplicated)
|
2357
2355
|
end
|
2358
2356
|
|
2359
2357
|
# Get a boolean mask of the local maximum peaks.
|
@@ -2377,7 +2375,7 @@ module Polars
|
|
2377
2375
|
# # │ true │
|
2378
2376
|
# # └───────┘
|
2379
2377
|
def peak_max
|
2380
|
-
|
2378
|
+
_from_rbexpr(_rbexpr.peak_max)
|
2381
2379
|
end
|
2382
2380
|
|
2383
2381
|
# Get a boolean mask of the local minimum peaks.
|
@@ -2401,7 +2399,7 @@ module Polars
|
|
2401
2399
|
# # │ false │
|
2402
2400
|
# # └───────┘
|
2403
2401
|
def peak_min
|
2404
|
-
|
2402
|
+
_from_rbexpr(_rbexpr.peak_min)
|
2405
2403
|
end
|
2406
2404
|
|
2407
2405
|
# Get quantile value.
|
@@ -2423,7 +2421,7 @@ module Polars
|
|
2423
2421
|
# # │ --- │
|
2424
2422
|
# # │ f64 │
|
2425
2423
|
# # ╞═════╡
|
2426
|
-
# # │
|
2424
|
+
# # │ 2.0 │
|
2427
2425
|
# # └─────┘
|
2428
2426
|
#
|
2429
2427
|
# @example
|
@@ -2475,7 +2473,207 @@ module Polars
|
|
2475
2473
|
# # └─────┘
|
2476
2474
|
def quantile(quantile, interpolation: "nearest")
|
2477
2475
|
quantile = Utils.expr_to_lit_or_expr(quantile, str_to_lit: false)
|
2478
|
-
|
2476
|
+
_from_rbexpr(_rbexpr.quantile(quantile._rbexpr, interpolation))
|
2477
|
+
end
|
2478
|
+
|
2479
|
+
# Bin continuous values into discrete categories.
|
2480
|
+
#
|
2481
|
+
# @param breaks [Array]
|
2482
|
+
# List of unique cut points.
|
2483
|
+
# @param labels [Array]
|
2484
|
+
# Names of the categories. The number of labels must be equal to the number
|
2485
|
+
# of cut points plus one.
|
2486
|
+
# @param left_closed [Boolean]
|
2487
|
+
# Set the intervals to be left-closed instead of right-closed.
|
2488
|
+
# @param include_breaks [Boolean]
|
2489
|
+
# Include a column with the right endpoint of the bin each observation falls
|
2490
|
+
# in. This will change the data type of the output from a
|
2491
|
+
# `Categorical` to a `Struct`.
|
2492
|
+
#
|
2493
|
+
# @return [Expr]
|
2494
|
+
#
|
2495
|
+
# @example Divide a column into three categories.
|
2496
|
+
# df = Polars::DataFrame.new({"foo" => [-2, -1, 0, 1, 2]})
|
2497
|
+
# df.with_columns(
|
2498
|
+
# Polars.col("foo").cut([-1, 1], labels: ["a", "b", "c"]).alias("cut")
|
2499
|
+
# )
|
2500
|
+
# # =>
|
2501
|
+
# # shape: (5, 2)
|
2502
|
+
# # ┌─────┬─────┐
|
2503
|
+
# # │ foo ┆ cut │
|
2504
|
+
# # │ --- ┆ --- │
|
2505
|
+
# # │ i64 ┆ cat │
|
2506
|
+
# # ╞═════╪═════╡
|
2507
|
+
# # │ -2 ┆ a │
|
2508
|
+
# # │ -1 ┆ a │
|
2509
|
+
# # │ 0 ┆ b │
|
2510
|
+
# # │ 1 ┆ b │
|
2511
|
+
# # │ 2 ┆ c │
|
2512
|
+
# # └─────┴─────┘
|
2513
|
+
#
|
2514
|
+
# @example Add both the category and the breakpoint.
|
2515
|
+
# df.with_columns(
|
2516
|
+
# Polars.col("foo").cut([-1, 1], include_breaks: true).alias("cut")
|
2517
|
+
# ).unnest("cut")
|
2518
|
+
# # =>
|
2519
|
+
# # shape: (5, 3)
|
2520
|
+
# # ┌─────┬──────┬────────────┐
|
2521
|
+
# # │ foo ┆ brk ┆ foo_bin │
|
2522
|
+
# # │ --- ┆ --- ┆ --- │
|
2523
|
+
# # │ i64 ┆ f64 ┆ cat │
|
2524
|
+
# # ╞═════╪══════╪════════════╡
|
2525
|
+
# # │ -2 ┆ -1.0 ┆ (-inf, -1] │
|
2526
|
+
# # │ -1 ┆ -1.0 ┆ (-inf, -1] │
|
2527
|
+
# # │ 0 ┆ 1.0 ┆ (-1, 1] │
|
2528
|
+
# # │ 1 ┆ 1.0 ┆ (-1, 1] │
|
2529
|
+
# # │ 2 ┆ inf ┆ (1, inf] │
|
2530
|
+
# # └─────┴──────┴────────────┘
|
2531
|
+
def cut(breaks, labels: nil, left_closed: false, include_breaks: false)
|
2532
|
+
_from_rbexpr(_rbexpr.cut(breaks, labels, left_closed, include_breaks))
|
2533
|
+
end
|
2534
|
+
|
2535
|
+
# Bin continuous values into discrete categories based on their quantiles.
|
2536
|
+
#
|
2537
|
+
# @param quantiles [Array]
|
2538
|
+
# Either a list of quantile probabilities between 0 and 1 or a positive
|
2539
|
+
# integer determining the number of bins with uniform probability.
|
2540
|
+
# @param labels [Array]
|
2541
|
+
# Names of the categories. The number of labels must be equal to the number
|
2542
|
+
# of categories.
|
2543
|
+
# @param left_closed [Boolean]
|
2544
|
+
# Set the intervals to be left-closed instead of right-closed.
|
2545
|
+
# @param allow_duplicates [Boolean]
|
2546
|
+
# If set to `true`, duplicates in the resulting quantiles are dropped,
|
2547
|
+
# rather than raising a `DuplicateError`. This can happen even with unique
|
2548
|
+
# probabilities, depending on the data.
|
2549
|
+
# @param include_breaks [Boolean]
|
2550
|
+
# Include a column with the right endpoint of the bin each observation falls
|
2551
|
+
# in. This will change the data type of the output from a
|
2552
|
+
# `Categorical` to a `Struct`.
|
2553
|
+
#
|
2554
|
+
# @return [Expr]
|
2555
|
+
#
|
2556
|
+
# @example Divide a column into three categories according to pre-defined quantile probabilities.
|
2557
|
+
# df = Polars::DataFrame.new({"foo" => [-2, -1, 0, 1, 2]})
|
2558
|
+
# df.with_columns(
|
2559
|
+
# Polars.col("foo").qcut([0.25, 0.75], labels: ["a", "b", "c"]).alias("qcut")
|
2560
|
+
# )
|
2561
|
+
# # =>
|
2562
|
+
# # shape: (5, 2)
|
2563
|
+
# # ┌─────┬──────┐
|
2564
|
+
# # │ foo ┆ qcut │
|
2565
|
+
# # │ --- ┆ --- │
|
2566
|
+
# # │ i64 ┆ cat │
|
2567
|
+
# # ╞═════╪══════╡
|
2568
|
+
# # │ -2 ┆ a │
|
2569
|
+
# # │ -1 ┆ a │
|
2570
|
+
# # │ 0 ┆ b │
|
2571
|
+
# # │ 1 ┆ b │
|
2572
|
+
# # │ 2 ┆ c │
|
2573
|
+
# # └─────┴──────┘
|
2574
|
+
#
|
2575
|
+
# @example Divide a column into two categories using uniform quantile probabilities.
|
2576
|
+
# df.with_columns(
|
2577
|
+
# Polars.col("foo")
|
2578
|
+
# .qcut(2, labels: ["low", "high"], left_closed: true)
|
2579
|
+
# .alias("qcut")
|
2580
|
+
# )
|
2581
|
+
# # =>
|
2582
|
+
# # shape: (5, 2)
|
2583
|
+
# # ┌─────┬──────┐
|
2584
|
+
# # │ foo ┆ qcut │
|
2585
|
+
# # │ --- ┆ --- │
|
2586
|
+
# # │ i64 ┆ cat │
|
2587
|
+
# # ╞═════╪══════╡
|
2588
|
+
# # │ -2 ┆ low │
|
2589
|
+
# # │ -1 ┆ low │
|
2590
|
+
# # │ 0 ┆ high │
|
2591
|
+
# # │ 1 ┆ high │
|
2592
|
+
# # │ 2 ┆ high │
|
2593
|
+
# # └─────┴──────┘
|
2594
|
+
#
|
2595
|
+
# @example Add both the category and the breakpoint.
|
2596
|
+
# df.with_columns(
|
2597
|
+
# Polars.col("foo").qcut([0.25, 0.75], include_breaks: true).alias("qcut")
|
2598
|
+
# ).unnest("qcut")
|
2599
|
+
# # =>
|
2600
|
+
# # shape: (5, 3)
|
2601
|
+
# # ┌─────┬──────┬────────────┐
|
2602
|
+
# # │ foo ┆ brk ┆ foo_bin │
|
2603
|
+
# # │ --- ┆ --- ┆ --- │
|
2604
|
+
# # │ i64 ┆ f64 ┆ cat │
|
2605
|
+
# # ╞═════╪══════╪════════════╡
|
2606
|
+
# # │ -2 ┆ -1.0 ┆ (-inf, -1] │
|
2607
|
+
# # │ -1 ┆ -1.0 ┆ (-inf, -1] │
|
2608
|
+
# # │ 0 ┆ 1.0 ┆ (-1, 1] │
|
2609
|
+
# # │ 1 ┆ 1.0 ┆ (-1, 1] │
|
2610
|
+
# # │ 2 ┆ inf ┆ (1, inf] │
|
2611
|
+
# # └─────┴──────┴────────────┘
|
2612
|
+
def qcut(quantiles, labels: nil, left_closed: false, allow_duplicates: false, include_breaks: false)
|
2613
|
+
if quantiles.is_a?(Integer)
|
2614
|
+
rbexpr = _rbexpr.qcut_uniform(
|
2615
|
+
quantiles, labels, left_closed, allow_duplicates, include_breaks
|
2616
|
+
)
|
2617
|
+
else
|
2618
|
+
rbexpr = _rbexpr.qcut(
|
2619
|
+
quantiles, labels, left_closed, allow_duplicates, include_breaks
|
2620
|
+
)
|
2621
|
+
end
|
2622
|
+
|
2623
|
+
_from_rbexpr(rbexpr)
|
2624
|
+
end
|
2625
|
+
|
2626
|
+
# Get the lengths of runs of identical values.
|
2627
|
+
#
|
2628
|
+
# @return [Expr]
|
2629
|
+
#
|
2630
|
+
# @example
|
2631
|
+
# df = Polars::DataFrame.new(Polars::Series.new("s", [1, 1, 2, 1, nil, 1, 3, 3]))
|
2632
|
+
# df.select(Polars.col("s").rle).unnest("s")
|
2633
|
+
# # =>
|
2634
|
+
# # shape: (6, 2)
|
2635
|
+
# # ┌─────────┬────────┐
|
2636
|
+
# # │ lengths ┆ values │
|
2637
|
+
# # │ --- ┆ --- │
|
2638
|
+
# # │ i32 ┆ i64 │
|
2639
|
+
# # ╞═════════╪════════╡
|
2640
|
+
# # │ 2 ┆ 1 │
|
2641
|
+
# # │ 1 ┆ 2 │
|
2642
|
+
# # │ 1 ┆ 1 │
|
2643
|
+
# # │ 1 ┆ null │
|
2644
|
+
# # │ 1 ┆ 1 │
|
2645
|
+
# # │ 2 ┆ 3 │
|
2646
|
+
# # └─────────┴────────┘
|
2647
|
+
def rle
|
2648
|
+
_from_rbexpr(_rbexpr.rle)
|
2649
|
+
end
|
2650
|
+
|
2651
|
+
# Map values to run IDs.
|
2652
|
+
#
|
2653
|
+
# Similar to RLE, but it maps each value to an ID corresponding to the run into
|
2654
|
+
# which it falls. This is especially useful when you want to define groups by
|
2655
|
+
# runs of identical values rather than the values themselves.
|
2656
|
+
#
|
2657
|
+
# @return [Expr]
|
2658
|
+
#
|
2659
|
+
# @example
|
2660
|
+
# df = Polars::DataFrame.new({"a" => [1, 2, 1, 1, 1], "b" => ["x", "x", nil, "y", "y"]})
|
2661
|
+
# df.with_columns([Polars.col("a").rle_id.alias("a_r"), Polars.struct(["a", "b"]).rle_id.alias("ab_r")])
|
2662
|
+
# # =>
|
2663
|
+
# # shape: (5, 4)
|
2664
|
+
# # ┌─────┬──────┬─────┬──────┐
|
2665
|
+
# # │ a ┆ b ┆ a_r ┆ ab_r │
|
2666
|
+
# # │ --- ┆ --- ┆ --- ┆ --- │
|
2667
|
+
# # │ i64 ┆ str ┆ u32 ┆ u32 │
|
2668
|
+
# # ╞═════╪══════╪═════╪══════╡
|
2669
|
+
# # │ 1 ┆ x ┆ 0 ┆ 0 │
|
2670
|
+
# # │ 2 ┆ x ┆ 1 ┆ 1 │
|
2671
|
+
# # │ 1 ┆ null ┆ 2 ┆ 2 │
|
2672
|
+
# # │ 1 ┆ y ┆ 2 ┆ 3 │
|
2673
|
+
# # │ 1 ┆ y ┆ 2 ┆ 3 │
|
2674
|
+
# # └─────┴──────┴─────┴──────┘
|
2675
|
+
def rle_id
|
2676
|
+
_from_rbexpr(_rbexpr.rle_id)
|
2479
2677
|
end
|
2480
2678
|
|
2481
2679
|
# Filter a single column.
|
@@ -2514,7 +2712,7 @@ module Polars
|
|
2514
2712
|
# # │ g2 ┆ 0 ┆ 3 │
|
2515
2713
|
# # └───────────┴─────┴─────┘
|
2516
2714
|
def filter(predicate)
|
2517
|
-
|
2715
|
+
_from_rbexpr(_rbexpr.filter(predicate._rbexpr))
|
2518
2716
|
end
|
2519
2717
|
|
2520
2718
|
# Filter a single column.
|
@@ -2592,7 +2790,7 @@ module Polars
|
|
2592
2790
|
# if !return_dtype.nil?
|
2593
2791
|
# return_dtype = Utils.rb_type_to_dtype(return_dtype)
|
2594
2792
|
# end
|
2595
|
-
#
|
2793
|
+
# _from_rbexpr(_rbexpr.map(f, return_dtype, agg_list))
|
2596
2794
|
# end
|
2597
2795
|
|
2598
2796
|
# Apply a custom/user-defined function (UDF) in a GroupBy or Projection context.
|
@@ -2703,7 +2901,7 @@ module Polars
|
|
2703
2901
|
# # │ b ┆ [2, 3, 4] │
|
2704
2902
|
# # └───────┴───────────┘
|
2705
2903
|
def flatten
|
2706
|
-
|
2904
|
+
_from_rbexpr(_rbexpr.explode)
|
2707
2905
|
end
|
2708
2906
|
|
2709
2907
|
# Explode a list or utf8 Series.
|
@@ -2730,7 +2928,7 @@ module Polars
|
|
2730
2928
|
# # │ 6 │
|
2731
2929
|
# # └─────┘
|
2732
2930
|
def explode
|
2733
|
-
|
2931
|
+
_from_rbexpr(_rbexpr.explode)
|
2734
2932
|
end
|
2735
2933
|
|
2736
2934
|
# Take every nth value in the Series and return as a new Series.
|
@@ -2751,8 +2949,8 @@ module Polars
|
|
2751
2949
|
# # │ 4 │
|
2752
2950
|
# # │ 7 │
|
2753
2951
|
# # └─────┘
|
2754
|
-
def gather_every(n)
|
2755
|
-
|
2952
|
+
def gather_every(n, offset = 0)
|
2953
|
+
_from_rbexpr(_rbexpr.gather_every(n, offset))
|
2756
2954
|
end
|
2757
2955
|
alias_method :take_every, :gather_every
|
2758
2956
|
|
@@ -2778,7 +2976,7 @@ module Polars
|
|
2778
2976
|
# # │ 3 │
|
2779
2977
|
# # └─────┘
|
2780
2978
|
def head(n = 10)
|
2781
|
-
|
2979
|
+
_from_rbexpr(_rbexpr.head(n))
|
2782
2980
|
end
|
2783
2981
|
|
2784
2982
|
# Get the last `n` rows.
|
@@ -2803,7 +3001,7 @@ module Polars
|
|
2803
3001
|
# # │ 7 │
|
2804
3002
|
# # └─────┘
|
2805
3003
|
def tail(n = 10)
|
2806
|
-
|
3004
|
+
_from_rbexpr(_rbexpr.tail(n))
|
2807
3005
|
end
|
2808
3006
|
|
2809
3007
|
# Get the first `n` rows.
|
@@ -2818,6 +3016,500 @@ module Polars
|
|
2818
3016
|
head(n)
|
2819
3017
|
end
|
2820
3018
|
|
3019
|
+
# Method equivalent of equality operator `expr == other`.
|
3020
|
+
#
|
3021
|
+
# @param other [Object]
|
3022
|
+
# A literal or expression value to compare with.
|
3023
|
+
#
|
3024
|
+
# @return [Expr]
|
3025
|
+
# @example
|
3026
|
+
# df = Polars::DataFrame.new(
|
3027
|
+
# {
|
3028
|
+
# "x" => [1.0, 2.0, Float::NAN, 4.0],
|
3029
|
+
# "y" => [2.0, 2.0, Float::NAN, 4.0]
|
3030
|
+
# }
|
3031
|
+
# )
|
3032
|
+
# df.with_columns(
|
3033
|
+
# Polars.col("x").eq(Polars.col("y")).alias("x == y")
|
3034
|
+
# )
|
3035
|
+
# # =>
|
3036
|
+
# # shape: (4, 3)
|
3037
|
+
# # ┌─────┬─────┬────────┐
|
3038
|
+
# # │ x ┆ y ┆ x == y │
|
3039
|
+
# # │ --- ┆ --- ┆ --- │
|
3040
|
+
# # │ f64 ┆ f64 ┆ bool │
|
3041
|
+
# # ╞═════╪═════╪════════╡
|
3042
|
+
# # │ 1.0 ┆ 2.0 ┆ false │
|
3043
|
+
# # │ 2.0 ┆ 2.0 ┆ true │
|
3044
|
+
# # │ NaN ┆ NaN ┆ true │
|
3045
|
+
# # │ 4.0 ┆ 4.0 ┆ true │
|
3046
|
+
# # └─────┴─────┴────────┘
|
3047
|
+
def eq(other)
|
3048
|
+
self == other
|
3049
|
+
end
|
3050
|
+
|
3051
|
+
# Method equivalent of equality operator `expr == other` where `None == None`.
|
3052
|
+
#
|
3053
|
+
# This differs from default `eq` where null values are propagated.
|
3054
|
+
#
|
3055
|
+
# @param other [Object]
|
3056
|
+
# A literal or expression value to compare with.
|
3057
|
+
#
|
3058
|
+
# @return [Expr]
|
3059
|
+
#
|
3060
|
+
# @example
|
3061
|
+
# df = Polars::DataFrame.new(
|
3062
|
+
# data={
|
3063
|
+
# "x" => [1.0, 2.0, Float::NAN, 4.0, nil, nil],
|
3064
|
+
# "y" => [2.0, 2.0, Float::NAN, 4.0, 5.0, nil]
|
3065
|
+
# }
|
3066
|
+
# )
|
3067
|
+
# df.with_columns(
|
3068
|
+
# Polars.col("x").eq(Polars.col("y")).alias("x eq y"),
|
3069
|
+
# Polars.col("x").eq_missing(Polars.col("y")).alias("x eq_missing y")
|
3070
|
+
# )
|
3071
|
+
# # =>
|
3072
|
+
# # shape: (6, 4)
|
3073
|
+
# # ┌──────┬──────┬────────┬────────────────┐
|
3074
|
+
# # │ x ┆ y ┆ x eq y ┆ x eq_missing y │
|
3075
|
+
# # │ --- ┆ --- ┆ --- ┆ --- │
|
3076
|
+
# # │ f64 ┆ f64 ┆ bool ┆ bool │
|
3077
|
+
# # ╞══════╪══════╪════════╪════════════════╡
|
3078
|
+
# # │ 1.0 ┆ 2.0 ┆ false ┆ false │
|
3079
|
+
# # │ 2.0 ┆ 2.0 ┆ true ┆ true │
|
3080
|
+
# # │ NaN ┆ NaN ┆ true ┆ true │
|
3081
|
+
# # │ 4.0 ┆ 4.0 ┆ true ┆ true │
|
3082
|
+
# # │ null ┆ 5.0 ┆ null ┆ false │
|
3083
|
+
# # │ null ┆ null ┆ null ┆ true │
|
3084
|
+
# # └──────┴──────┴────────┴────────────────┘
|
3085
|
+
def eq_missing(other)
|
3086
|
+
other = Utils.parse_as_expression(other, str_as_lit: true)
|
3087
|
+
_from_rbexpr(_rbexpr.eq_missing(other))
|
3088
|
+
end
|
3089
|
+
|
3090
|
+
# Method equivalent of "greater than or equal" operator `expr >= other`.
|
3091
|
+
#
|
3092
|
+
# @param other [Object]
|
3093
|
+
# A literal or expression value to compare with.
|
3094
|
+
#
|
3095
|
+
# @return [Expr]
|
3096
|
+
#
|
3097
|
+
# @example
|
3098
|
+
# df = Polars::DataFrame.new(
|
3099
|
+
# {
|
3100
|
+
# "x" => [5.0, 4.0, Float::NAN, 2.0],
|
3101
|
+
# "y" => [5.0, 3.0, Float::NAN, 1.0]
|
3102
|
+
# }
|
3103
|
+
# )
|
3104
|
+
# df.with_columns(
|
3105
|
+
# Polars.col("x").ge(Polars.col("y")).alias("x >= y")
|
3106
|
+
# )
|
3107
|
+
# # =>
|
3108
|
+
# # shape: (4, 3)
|
3109
|
+
# # ┌─────┬─────┬────────┐
|
3110
|
+
# # │ x ┆ y ┆ x >= y │
|
3111
|
+
# # │ --- ┆ --- ┆ --- │
|
3112
|
+
# # │ f64 ┆ f64 ┆ bool │
|
3113
|
+
# # ╞═════╪═════╪════════╡
|
3114
|
+
# # │ 5.0 ┆ 5.0 ┆ true │
|
3115
|
+
# # │ 4.0 ┆ 3.0 ┆ true │
|
3116
|
+
# # │ NaN ┆ NaN ┆ true │
|
3117
|
+
# # │ 2.0 ┆ 1.0 ┆ true │
|
3118
|
+
# # └─────┴─────┴────────┘
|
3119
|
+
def ge(other)
|
3120
|
+
self >= other
|
3121
|
+
end
|
3122
|
+
|
3123
|
+
# Method equivalent of "greater than" operator `expr > other`.
|
3124
|
+
#
|
3125
|
+
# @param other [Object]
|
3126
|
+
# A literal or expression value to compare with.
|
3127
|
+
#
|
3128
|
+
# @return [Expr]
|
3129
|
+
#
|
3130
|
+
# @example
|
3131
|
+
# df = Polars::DataFrame.new(
|
3132
|
+
# {
|
3133
|
+
# "x" => [5.0, 4.0, Float::NAN, 2.0],
|
3134
|
+
# "y" => [5.0, 3.0, Float::NAN, 1.0]
|
3135
|
+
# }
|
3136
|
+
# )
|
3137
|
+
# df.with_columns(
|
3138
|
+
# Polars.col("x").gt(Polars.col("y")).alias("x > y")
|
3139
|
+
# )
|
3140
|
+
# # =>
|
3141
|
+
# # shape: (4, 3)
|
3142
|
+
# # ┌─────┬─────┬───────┐
|
3143
|
+
# # │ x ┆ y ┆ x > y │
|
3144
|
+
# # │ --- ┆ --- ┆ --- │
|
3145
|
+
# # │ f64 ┆ f64 ┆ bool │
|
3146
|
+
# # ╞═════╪═════╪═══════╡
|
3147
|
+
# # │ 5.0 ┆ 5.0 ┆ false │
|
3148
|
+
# # │ 4.0 ┆ 3.0 ┆ true │
|
3149
|
+
# # │ NaN ┆ NaN ┆ false │
|
3150
|
+
# # │ 2.0 ┆ 1.0 ┆ true │
|
3151
|
+
# # └─────┴─────┴───────┘
|
3152
|
+
def gt(other)
|
3153
|
+
self > other
|
3154
|
+
end
|
3155
|
+
|
3156
|
+
# Method equivalent of "less than or equal" operator `expr <= other`.
|
3157
|
+
#
|
3158
|
+
# @param other [Object]
|
3159
|
+
# A literal or expression value to compare with.
|
3160
|
+
#
|
3161
|
+
# @return [Expr]
|
3162
|
+
#
|
3163
|
+
# @example
|
3164
|
+
# df = Polars::DataFrame.new(
|
3165
|
+
# {
|
3166
|
+
# "x" => [5.0, 4.0, Float::NAN, 0.5],
|
3167
|
+
# "y" => [5.0, 3.5, Float::NAN, 2.0]
|
3168
|
+
# }
|
3169
|
+
# )
|
3170
|
+
# df.with_columns(
|
3171
|
+
# Polars.col("x").le(Polars.col("y")).alias("x <= y")
|
3172
|
+
# )
|
3173
|
+
# # =>
|
3174
|
+
# # shape: (4, 3)
|
3175
|
+
# # ┌─────┬─────┬────────┐
|
3176
|
+
# # │ x ┆ y ┆ x <= y │
|
3177
|
+
# # │ --- ┆ --- ┆ --- │
|
3178
|
+
# # │ f64 ┆ f64 ┆ bool │
|
3179
|
+
# # ╞═════╪═════╪════════╡
|
3180
|
+
# # │ 5.0 ┆ 5.0 ┆ true │
|
3181
|
+
# # │ 4.0 ┆ 3.5 ┆ false │
|
3182
|
+
# # │ NaN ┆ NaN ┆ true │
|
3183
|
+
# # │ 0.5 ┆ 2.0 ┆ true │
|
3184
|
+
# # └─────┴─────┴────────┘
|
3185
|
+
def le(other)
|
3186
|
+
self <= other
|
3187
|
+
end
|
3188
|
+
|
3189
|
+
# Method equivalent of "less than" operator `expr < other`.
|
3190
|
+
#
|
3191
|
+
# @param other [Object]
|
3192
|
+
# A literal or expression value to compare with.
|
3193
|
+
#
|
3194
|
+
# @return [Expr]
|
3195
|
+
#
|
3196
|
+
# @example
|
3197
|
+
# df = Polars::DataFrame.new(
|
3198
|
+
# {
|
3199
|
+
# "x" => [1.0, 2.0, Float::NAN, 3.0],
|
3200
|
+
# "y" => [2.0, 2.0, Float::NAN, 4.0]
|
3201
|
+
# }
|
3202
|
+
# )
|
3203
|
+
# df.with_columns(
|
3204
|
+
# Polars.col("x").lt(Polars.col("y")).alias("x < y"),
|
3205
|
+
# )
|
3206
|
+
# # =>
|
3207
|
+
# # shape: (4, 3)
|
3208
|
+
# # ┌─────┬─────┬───────┐
|
3209
|
+
# # │ x ┆ y ┆ x < y │
|
3210
|
+
# # │ --- ┆ --- ┆ --- │
|
3211
|
+
# # │ f64 ┆ f64 ┆ bool │
|
3212
|
+
# # ╞═════╪═════╪═══════╡
|
3213
|
+
# # │ 1.0 ┆ 2.0 ┆ true │
|
3214
|
+
# # │ 2.0 ┆ 2.0 ┆ false │
|
3215
|
+
# # │ NaN ┆ NaN ┆ false │
|
3216
|
+
# # │ 3.0 ┆ 4.0 ┆ true │
|
3217
|
+
# # └─────┴─────┴───────┘
|
3218
|
+
def lt(other)
|
3219
|
+
self < other
|
3220
|
+
end
|
3221
|
+
|
3222
|
+
# Method equivalent of inequality operator `expr != other`.
|
3223
|
+
#
|
3224
|
+
# @param other [Object]
|
3225
|
+
# A literal or expression value to compare with.
|
3226
|
+
#
|
3227
|
+
# @return [Expr]
|
3228
|
+
#
|
3229
|
+
# @example
|
3230
|
+
# df = Polars::DataFrame.new(
|
3231
|
+
# {
|
3232
|
+
# "x" => [1.0, 2.0, Float::NAN, 4.0],
|
3233
|
+
# "y" => [2.0, 2.0, Float::NAN, 4.0]
|
3234
|
+
# }
|
3235
|
+
# )
|
3236
|
+
# df.with_columns(
|
3237
|
+
# Polars.col("x").ne(Polars.col("y")).alias("x != y"),
|
3238
|
+
# )
|
3239
|
+
# # =>
|
3240
|
+
# # shape: (4, 3)
|
3241
|
+
# # ┌─────┬─────┬────────┐
|
3242
|
+
# # │ x ┆ y ┆ x != y │
|
3243
|
+
# # │ --- ┆ --- ┆ --- │
|
3244
|
+
# # │ f64 ┆ f64 ┆ bool │
|
3245
|
+
# # ╞═════╪═════╪════════╡
|
3246
|
+
# # │ 1.0 ┆ 2.0 ┆ true │
|
3247
|
+
# # │ 2.0 ┆ 2.0 ┆ false │
|
3248
|
+
# # │ NaN ┆ NaN ┆ false │
|
3249
|
+
# # │ 4.0 ┆ 4.0 ┆ false │
|
3250
|
+
# # └─────┴─────┴────────┘
|
3251
|
+
def ne(other)
|
3252
|
+
self != other
|
3253
|
+
end
|
3254
|
+
|
3255
|
+
# Method equivalent of equality operator `expr != other` where `None == None`.
|
3256
|
+
#
|
3257
|
+
# This differs from default `ne` where null values are propagated.
|
3258
|
+
#
|
3259
|
+
# @param other [Object]
|
3260
|
+
# A literal or expression value to compare with.
|
3261
|
+
#
|
3262
|
+
# @return [Expr]
|
3263
|
+
#
|
3264
|
+
# @example
|
3265
|
+
# df = Polars::DataFrame.new(
|
3266
|
+
# {
|
3267
|
+
# "x" => [1.0, 2.0, Float::NAN, 4.0, nil, nil],
|
3268
|
+
# "y" => [2.0, 2.0, Float::NAN, 4.0, 5.0, nil]
|
3269
|
+
# }
|
3270
|
+
# )
|
3271
|
+
# df.with_columns(
|
3272
|
+
# Polars.col("x").ne(Polars.col("y")).alias("x ne y"),
|
3273
|
+
# Polars.col("x").ne_missing(Polars.col("y")).alias("x ne_missing y")
|
3274
|
+
# )
|
3275
|
+
# # =>
|
3276
|
+
# # shape: (6, 4)
|
3277
|
+
# # ┌──────┬──────┬────────┬────────────────┐
|
3278
|
+
# # │ x ┆ y ┆ x ne y ┆ x ne_missing y │
|
3279
|
+
# # │ --- ┆ --- ┆ --- ┆ --- │
|
3280
|
+
# # │ f64 ┆ f64 ┆ bool ┆ bool │
|
3281
|
+
# # ╞══════╪══════╪════════╪════════════════╡
|
3282
|
+
# # │ 1.0 ┆ 2.0 ┆ true ┆ true │
|
3283
|
+
# # │ 2.0 ┆ 2.0 ┆ false ┆ false │
|
3284
|
+
# # │ NaN ┆ NaN ┆ false ┆ false │
|
3285
|
+
# # │ 4.0 ┆ 4.0 ┆ false ┆ false │
|
3286
|
+
# # │ null ┆ 5.0 ┆ null ┆ true │
|
3287
|
+
# # │ null ┆ null ┆ null ┆ false │
|
3288
|
+
# # └──────┴──────┴────────┴────────────────┘
|
3289
|
+
def ne_missing(other)
|
3290
|
+
other = Utils.parse_as_expression(other, str_as_lit: true)
|
3291
|
+
_from_rbexpr(_rbexpr.neq_missing(other))
|
3292
|
+
end
|
3293
|
+
|
3294
|
+
# Method equivalent of addition operator `expr + other`.
|
3295
|
+
#
|
3296
|
+
# @param other [Object]
|
3297
|
+
# numeric or string value; accepts expression input.
|
3298
|
+
#
|
3299
|
+
# @return [Expr]
|
3300
|
+
#
|
3301
|
+
# @example
|
3302
|
+
# df = Polars::DataFrame.new({"x" => [1, 2, 3, 4, 5]})
|
3303
|
+
# df.with_columns(
|
3304
|
+
# Polars.col("x").add(2).alias("x+int"),
|
3305
|
+
# Polars.col("x").add(Polars.col("x").cum_prod).alias("x+expr")
|
3306
|
+
# )
|
3307
|
+
# # =>
|
3308
|
+
# # shape: (5, 3)
|
3309
|
+
# # ┌─────┬───────┬────────┐
|
3310
|
+
# # │ x ┆ x+int ┆ x+expr │
|
3311
|
+
# # │ --- ┆ --- ┆ --- │
|
3312
|
+
# # │ i64 ┆ i64 ┆ i64 │
|
3313
|
+
# # ╞═════╪═══════╪════════╡
|
3314
|
+
# # │ 1 ┆ 3 ┆ 2 │
|
3315
|
+
# # │ 2 ┆ 4 ┆ 4 │
|
3316
|
+
# # │ 3 ┆ 5 ┆ 9 │
|
3317
|
+
# # │ 4 ┆ 6 ┆ 28 │
|
3318
|
+
# # │ 5 ┆ 7 ┆ 125 │
|
3319
|
+
# # └─────┴───────┴────────┘
|
3320
|
+
#
|
3321
|
+
# @example
|
3322
|
+
# df = Polars::DataFrame.new(
|
3323
|
+
# {"x" => ["a", "d", "g"], "y": ["b", "e", "h"], "z": ["c", "f", "i"]}
|
3324
|
+
# )
|
3325
|
+
# df.with_columns(Polars.col("x").add(Polars.col("y")).add(Polars.col("z")).alias("xyz"))
|
3326
|
+
# # =>
|
3327
|
+
# # shape: (3, 4)
|
3328
|
+
# # ┌─────┬─────┬─────┬─────┐
|
3329
|
+
# # │ x ┆ y ┆ z ┆ xyz │
|
3330
|
+
# # │ --- ┆ --- ┆ --- ┆ --- │
|
3331
|
+
# # │ str ┆ str ┆ str ┆ str │
|
3332
|
+
# # ╞═════╪═════╪═════╪═════╡
|
3333
|
+
# # │ a ┆ b ┆ c ┆ abc │
|
3334
|
+
# # │ d ┆ e ┆ f ┆ def │
|
3335
|
+
# # │ g ┆ h ┆ i ┆ ghi │
|
3336
|
+
# # └─────┴─────┴─────┴─────┘
|
3337
|
+
def add(other)
|
3338
|
+
self + other
|
3339
|
+
end
|
3340
|
+
|
3341
|
+
# Method equivalent of integer division operator `expr // other`.
|
3342
|
+
#
|
3343
|
+
# @param other [Object]
|
3344
|
+
# Numeric literal or expression value.
|
3345
|
+
#
|
3346
|
+
# @return [Expr]
|
3347
|
+
#
|
3348
|
+
# @example
|
3349
|
+
# df = Polars::DataFrame.new({"x" => [1, 2, 3, 4, 5]})
|
3350
|
+
# df.with_columns(
|
3351
|
+
# Polars.col("x").truediv(2).alias("x/2"),
|
3352
|
+
# Polars.col("x").floordiv(2).alias("x//2")
|
3353
|
+
# )
|
3354
|
+
# # =>
|
3355
|
+
# # shape: (5, 3)
|
3356
|
+
# # ┌─────┬─────┬──────┐
|
3357
|
+
# # │ x ┆ x/2 ┆ x//2 │
|
3358
|
+
# # │ --- ┆ --- ┆ --- │
|
3359
|
+
# # │ i64 ┆ f64 ┆ i64 │
|
3360
|
+
# # ╞═════╪═════╪══════╡
|
3361
|
+
# # │ 1 ┆ 0.5 ┆ 0 │
|
3362
|
+
# # │ 2 ┆ 1.0 ┆ 1 │
|
3363
|
+
# # │ 3 ┆ 1.5 ┆ 1 │
|
3364
|
+
# # │ 4 ┆ 2.0 ┆ 2 │
|
3365
|
+
# # │ 5 ┆ 2.5 ┆ 2 │
|
3366
|
+
# # └─────┴─────┴──────┘
|
3367
|
+
def floordiv(other)
|
3368
|
+
_from_rbexpr(_rbexpr.floordiv(_to_rbexpr(other)))
|
3369
|
+
end
|
3370
|
+
|
3371
|
+
# Method equivalent of modulus operator `expr % other`.
|
3372
|
+
#
|
3373
|
+
# @param other [Object]
|
3374
|
+
# Numeric literal or expression value.
|
3375
|
+
#
|
3376
|
+
# @return [Expr]
|
3377
|
+
#
|
3378
|
+
# @example
|
3379
|
+
# df = Polars::DataFrame.new({"x" => [0, 1, 2, 3, 4]})
|
3380
|
+
# df.with_columns(Polars.col("x").mod(2).alias("x%2"))
|
3381
|
+
# # =>
|
3382
|
+
# # shape: (5, 2)
|
3383
|
+
# # ┌─────┬─────┐
|
3384
|
+
# # │ x ┆ x%2 │
|
3385
|
+
# # │ --- ┆ --- │
|
3386
|
+
# # │ i64 ┆ i64 │
|
3387
|
+
# # ╞═════╪═════╡
|
3388
|
+
# # │ 0 ┆ 0 │
|
3389
|
+
# # │ 1 ┆ 1 │
|
3390
|
+
# # │ 2 ┆ 0 │
|
3391
|
+
# # │ 3 ┆ 1 │
|
3392
|
+
# # │ 4 ┆ 0 │
|
3393
|
+
# # └─────┴─────┘
|
3394
|
+
def mod(other)
|
3395
|
+
self % other
|
3396
|
+
end
|
3397
|
+
|
3398
|
+
# Method equivalent of multiplication operator `expr * other`.
|
3399
|
+
#
|
3400
|
+
# @param other [Object]
|
3401
|
+
# Numeric literal or expression value.
|
3402
|
+
#
|
3403
|
+
# @return [Expr]
|
3404
|
+
#
|
3405
|
+
# @example
|
3406
|
+
# df = Polars::DataFrame.new({"x" => [1, 2, 4, 8, 16]})
|
3407
|
+
# df.with_columns(
|
3408
|
+
# Polars.col("x").mul(2).alias("x*2"),
|
3409
|
+
# Polars.col("x").mul(Polars.col("x").log(2)).alias("x * xlog2"),
|
3410
|
+
# )
|
3411
|
+
# # =>
|
3412
|
+
# # shape: (5, 3)
|
3413
|
+
# # ┌─────┬─────┬───────────┐
|
3414
|
+
# # │ x ┆ x*2 ┆ x * xlog2 │
|
3415
|
+
# # │ --- ┆ --- ┆ --- │
|
3416
|
+
# # │ i64 ┆ i64 ┆ f64 │
|
3417
|
+
# # ╞═════╪═════╪═══════════╡
|
3418
|
+
# # │ 1 ┆ 2 ┆ 0.0 │
|
3419
|
+
# # │ 2 ┆ 4 ┆ 2.0 │
|
3420
|
+
# # │ 4 ┆ 8 ┆ 8.0 │
|
3421
|
+
# # │ 8 ┆ 16 ┆ 24.0 │
|
3422
|
+
# # │ 16 ┆ 32 ┆ 64.0 │
|
3423
|
+
# # └─────┴─────┴───────────┘
|
3424
|
+
def mul(other)
|
3425
|
+
self * other
|
3426
|
+
end
|
3427
|
+
|
3428
|
+
# Method equivalent of subtraction operator `expr - other`.
|
3429
|
+
#
|
3430
|
+
# @param other [Object]
|
3431
|
+
# Numeric literal or expression value.
|
3432
|
+
#
|
3433
|
+
# @return [Expr]
|
3434
|
+
#
|
3435
|
+
# @example
|
3436
|
+
# df = Polars::DataFrame.new({"x" => [0, 1, 2, 3, 4]})
|
3437
|
+
# df.with_columns(
|
3438
|
+
# Polars.col("x").sub(2).alias("x-2"),
|
3439
|
+
# Polars.col("x").sub(Polars.col("x").cum_sum).alias("x-expr"),
|
3440
|
+
# )
|
3441
|
+
# # =>
|
3442
|
+
# # shape: (5, 3)
|
3443
|
+
# # ┌─────┬─────┬────────┐
|
3444
|
+
# # │ x ┆ x-2 ┆ x-expr │
|
3445
|
+
# # │ --- ┆ --- ┆ --- │
|
3446
|
+
# # │ i64 ┆ i64 ┆ i64 │
|
3447
|
+
# # ╞═════╪═════╪════════╡
|
3448
|
+
# # │ 0 ┆ -2 ┆ 0 │
|
3449
|
+
# # │ 1 ┆ -1 ┆ 0 │
|
3450
|
+
# # │ 2 ┆ 0 ┆ -1 │
|
3451
|
+
# # │ 3 ┆ 1 ┆ -3 │
|
3452
|
+
# # │ 4 ┆ 2 ┆ -6 │
|
3453
|
+
# # └─────┴─────┴────────┘
|
3454
|
+
def sub(other)
|
3455
|
+
self - other
|
3456
|
+
end
|
3457
|
+
|
3458
|
+
# Method equivalent of unary minus operator `-expr`.
|
3459
|
+
#
|
3460
|
+
# @return [Expr]
|
3461
|
+
#
|
3462
|
+
# @example
|
3463
|
+
# df = Polars::DataFrame.new({"a" => [-1, 0, 2, nil]})
|
3464
|
+
# df.with_columns(Polars.col("a").neg)
|
3465
|
+
# # =>
|
3466
|
+
# # shape: (4, 1)
|
3467
|
+
# # ┌──────┐
|
3468
|
+
# # │ a │
|
3469
|
+
# # │ --- │
|
3470
|
+
# # │ i64 │
|
3471
|
+
# # ╞══════╡
|
3472
|
+
# # │ 1 │
|
3473
|
+
# # │ 0 │
|
3474
|
+
# # │ -2 │
|
3475
|
+
# # │ null │
|
3476
|
+
# # └──────┘
|
3477
|
+
def neg
|
3478
|
+
-self
|
3479
|
+
end
|
3480
|
+
|
3481
|
+
# Method equivalent of float division operator `expr / other`.
|
3482
|
+
#
|
3483
|
+
# @param other [Object]
|
3484
|
+
# Numeric literal or expression value.
|
3485
|
+
#
|
3486
|
+
# @return [Expr]
|
3487
|
+
#
|
3488
|
+
# @example
|
3489
|
+
# df = Polars::DataFrame.new(
|
3490
|
+
# {"x" => [-2, -1, 0, 1, 2], "y" => [0.5, 0.0, 0.0, -4.0, -0.5]}
|
3491
|
+
# )
|
3492
|
+
# df.with_columns(
|
3493
|
+
# Polars.col("x").truediv(2).alias("x/2"),
|
3494
|
+
# Polars.col("x").truediv(Polars.col("y")).alias("x/y")
|
3495
|
+
# )
|
3496
|
+
# # =>
|
3497
|
+
# # shape: (5, 4)
|
3498
|
+
# # ┌─────┬──────┬──────┬───────┐
|
3499
|
+
# # │ x ┆ y ┆ x/2 ┆ x/y │
|
3500
|
+
# # │ --- ┆ --- ┆ --- ┆ --- │
|
3501
|
+
# # │ i64 ┆ f64 ┆ f64 ┆ f64 │
|
3502
|
+
# # ╞═════╪══════╪══════╪═══════╡
|
3503
|
+
# # │ -2 ┆ 0.5 ┆ -1.0 ┆ -4.0 │
|
3504
|
+
# # │ -1 ┆ 0.0 ┆ -0.5 ┆ -inf │
|
3505
|
+
# # │ 0 ┆ 0.0 ┆ 0.0 ┆ NaN │
|
3506
|
+
# # │ 1 ┆ -4.0 ┆ 0.5 ┆ -0.25 │
|
3507
|
+
# # │ 2 ┆ -0.5 ┆ 1.0 ┆ -4.0 │
|
3508
|
+
# # └─────┴──────┴──────┴───────┘
|
3509
|
+
def truediv(other)
|
3510
|
+
self / other
|
3511
|
+
end
|
3512
|
+
|
2821
3513
|
# Raise expression to the power of exponent.
|
2822
3514
|
#
|
2823
3515
|
# @return [Expr]
|
@@ -2838,8 +3530,35 @@ module Polars
|
|
2838
3530
|
# # │ 64.0 │
|
2839
3531
|
# # └──────┘
|
2840
3532
|
def pow(exponent)
|
2841
|
-
exponent
|
2842
|
-
|
3533
|
+
self**exponent
|
3534
|
+
end
|
3535
|
+
|
3536
|
+
# Method equivalent of bitwise exclusive-or operator `expr ^ other`.
|
3537
|
+
#
|
3538
|
+
# @param other [Object]
|
3539
|
+
# Integer or boolean value; accepts expression input.
|
3540
|
+
#
|
3541
|
+
# @return [Expr]
|
3542
|
+
#
|
3543
|
+
# @example
|
3544
|
+
# df = Polars::DataFrame.new(
|
3545
|
+
# {"x" => [true, false, true, false], "y" => [true, true, false, false]}
|
3546
|
+
# )
|
3547
|
+
# df.with_columns(Polars.col("x").xor(Polars.col("y")).alias("x ^ y"))
|
3548
|
+
# # =>
|
3549
|
+
# # shape: (4, 3)
|
3550
|
+
# # ┌───────┬───────┬───────┐
|
3551
|
+
# # │ x ┆ y ┆ x ^ y │
|
3552
|
+
# # │ --- ┆ --- ┆ --- │
|
3553
|
+
# # │ bool ┆ bool ┆ bool │
|
3554
|
+
# # ╞═══════╪═══════╪═══════╡
|
3555
|
+
# # │ true ┆ true ┆ false │
|
3556
|
+
# # │ false ┆ true ┆ true │
|
3557
|
+
# # │ true ┆ false ┆ true │
|
3558
|
+
# # │ false ┆ false ┆ false │
|
3559
|
+
# # └───────┴───────┴───────┘
|
3560
|
+
def xor(other)
|
3561
|
+
self ^ other
|
2843
3562
|
end
|
2844
3563
|
|
2845
3564
|
# Check if elements of this expression are present in the other Series.
|
@@ -2875,7 +3594,7 @@ module Polars
|
|
2875
3594
|
else
|
2876
3595
|
other = Utils.expr_to_lit_or_expr(other, str_to_lit: false)
|
2877
3596
|
end
|
2878
|
-
|
3597
|
+
_from_rbexpr(_rbexpr.is_in(other._rbexpr))
|
2879
3598
|
end
|
2880
3599
|
alias_method :in?, :is_in
|
2881
3600
|
|
@@ -2911,7 +3630,7 @@ module Polars
|
|
2911
3630
|
# # └─────────────────┘
|
2912
3631
|
def repeat_by(by)
|
2913
3632
|
by = Utils.expr_to_lit_or_expr(by, str_to_lit: false)
|
2914
|
-
|
3633
|
+
_from_rbexpr(_rbexpr.repeat_by(by._rbexpr))
|
2915
3634
|
end
|
2916
3635
|
|
2917
3636
|
# Check if this expression is between start and end.
|
@@ -3037,7 +3756,7 @@ module Polars
|
|
3037
3756
|
k1 = seed_1.nil? ? seed : seed_1
|
3038
3757
|
k2 = seed_2.nil? ? seed : seed_2
|
3039
3758
|
k3 = seed_3.nil? ? seed : seed_3
|
3040
|
-
|
3759
|
+
_from_rbexpr(_rbexpr._hash(k0, k1, k2, k3))
|
3041
3760
|
end
|
3042
3761
|
|
3043
3762
|
# Reinterpret the underlying bits as a signed/unsigned integer.
|
@@ -3071,7 +3790,7 @@ module Polars
|
|
3071
3790
|
# # │ 2 ┆ 2 │
|
3072
3791
|
# # └───────────────┴──────────┘
|
3073
3792
|
def reinterpret(signed: false)
|
3074
|
-
|
3793
|
+
_from_rbexpr(_rbexpr.reinterpret(signed))
|
3075
3794
|
end
|
3076
3795
|
|
3077
3796
|
# Print the value that this expression evaluates to and pass on the value.
|
@@ -3134,7 +3853,7 @@ module Polars
|
|
3134
3853
|
# # │ 3.0 ┆ 3.0 │
|
3135
3854
|
# # └─────┴─────┘
|
3136
3855
|
def interpolate(method: "linear")
|
3137
|
-
|
3856
|
+
_from_rbexpr(_rbexpr.interpolate(method))
|
3138
3857
|
end
|
3139
3858
|
|
3140
3859
|
# Apply a rolling min (moving min) over the values in this array.
|
@@ -3219,7 +3938,7 @@ module Polars
|
|
3219
3938
|
window_size, min_periods = _prepare_rolling_window_args(
|
3220
3939
|
window_size, min_periods
|
3221
3940
|
)
|
3222
|
-
|
3941
|
+
_from_rbexpr(
|
3223
3942
|
_rbexpr.rolling_min(
|
3224
3943
|
window_size, weights, min_periods, center, by, closed
|
3225
3944
|
)
|
@@ -3308,7 +4027,7 @@ module Polars
|
|
3308
4027
|
window_size, min_periods = _prepare_rolling_window_args(
|
3309
4028
|
window_size, min_periods
|
3310
4029
|
)
|
3311
|
-
|
4030
|
+
_from_rbexpr(
|
3312
4031
|
_rbexpr.rolling_max(
|
3313
4032
|
window_size, weights, min_periods, center, by, closed
|
3314
4033
|
)
|
@@ -3397,7 +4116,7 @@ module Polars
|
|
3397
4116
|
window_size, min_periods = _prepare_rolling_window_args(
|
3398
4117
|
window_size, min_periods
|
3399
4118
|
)
|
3400
|
-
|
4119
|
+
_from_rbexpr(
|
3401
4120
|
_rbexpr.rolling_mean(
|
3402
4121
|
window_size, weights, min_periods, center, by, closed
|
3403
4122
|
)
|
@@ -3486,7 +4205,7 @@ module Polars
|
|
3486
4205
|
window_size, min_periods = _prepare_rolling_window_args(
|
3487
4206
|
window_size, min_periods
|
3488
4207
|
)
|
3489
|
-
|
4208
|
+
_from_rbexpr(
|
3490
4209
|
_rbexpr.rolling_sum(
|
3491
4210
|
window_size, weights, min_periods, center, by, closed
|
3492
4211
|
)
|
@@ -3571,14 +4290,15 @@ module Polars
|
|
3571
4290
|
center: false,
|
3572
4291
|
by: nil,
|
3573
4292
|
closed: "left",
|
3574
|
-
ddof: 1
|
4293
|
+
ddof: 1,
|
4294
|
+
warn_if_unsorted: true
|
3575
4295
|
)
|
3576
4296
|
window_size, min_periods = _prepare_rolling_window_args(
|
3577
4297
|
window_size, min_periods
|
3578
4298
|
)
|
3579
|
-
|
4299
|
+
_from_rbexpr(
|
3580
4300
|
_rbexpr.rolling_std(
|
3581
|
-
window_size, weights, min_periods, center, by, closed, ddof
|
4301
|
+
window_size, weights, min_periods, center, by, closed, ddof, warn_if_unsorted
|
3582
4302
|
)
|
3583
4303
|
)
|
3584
4304
|
end
|
@@ -3661,14 +4381,15 @@ module Polars
|
|
3661
4381
|
center: false,
|
3662
4382
|
by: nil,
|
3663
4383
|
closed: "left",
|
3664
|
-
ddof: 1
|
4384
|
+
ddof: 1,
|
4385
|
+
warn_if_unsorted: true
|
3665
4386
|
)
|
3666
4387
|
window_size, min_periods = _prepare_rolling_window_args(
|
3667
4388
|
window_size, min_periods
|
3668
4389
|
)
|
3669
|
-
|
4390
|
+
_from_rbexpr(
|
3670
4391
|
_rbexpr.rolling_var(
|
3671
|
-
window_size, weights, min_periods, center, by, closed, ddof
|
4392
|
+
window_size, weights, min_periods, center, by, closed, ddof, warn_if_unsorted
|
3672
4393
|
)
|
3673
4394
|
)
|
3674
4395
|
end
|
@@ -3746,14 +4467,15 @@ module Polars
|
|
3746
4467
|
min_periods: nil,
|
3747
4468
|
center: false,
|
3748
4469
|
by: nil,
|
3749
|
-
closed: "left"
|
4470
|
+
closed: "left",
|
4471
|
+
warn_if_unsorted: true
|
3750
4472
|
)
|
3751
4473
|
window_size, min_periods = _prepare_rolling_window_args(
|
3752
4474
|
window_size, min_periods
|
3753
4475
|
)
|
3754
|
-
|
4476
|
+
_from_rbexpr(
|
3755
4477
|
_rbexpr.rolling_median(
|
3756
|
-
window_size, weights, min_periods, center, by, closed
|
4478
|
+
window_size, weights, min_periods, center, by, closed, warn_if_unsorted
|
3757
4479
|
)
|
3758
4480
|
)
|
3759
4481
|
end
|
@@ -3837,14 +4559,15 @@ module Polars
|
|
3837
4559
|
min_periods: nil,
|
3838
4560
|
center: false,
|
3839
4561
|
by: nil,
|
3840
|
-
closed: "left"
|
4562
|
+
closed: "left",
|
4563
|
+
warn_if_unsorted: true
|
3841
4564
|
)
|
3842
4565
|
window_size, min_periods = _prepare_rolling_window_args(
|
3843
4566
|
window_size, min_periods
|
3844
4567
|
)
|
3845
|
-
|
4568
|
+
_from_rbexpr(
|
3846
4569
|
_rbexpr.rolling_quantile(
|
3847
|
-
quantile, interpolation, window_size, weights, min_periods, center, by, closed
|
4570
|
+
quantile, interpolation, window_size, weights, min_periods, center, by, closed, warn_if_unsorted
|
3848
4571
|
)
|
3849
4572
|
)
|
3850
4573
|
end
|
@@ -3906,7 +4629,7 @@ module Polars
|
|
3906
4629
|
# if min_periods.nil?
|
3907
4630
|
# min_periods = window_size
|
3908
4631
|
# end
|
3909
|
-
#
|
4632
|
+
# _from_rbexpr(
|
3910
4633
|
# _rbexpr.rolling_apply(
|
3911
4634
|
# function, window_size, weights, min_periods, center
|
3912
4635
|
# )
|
@@ -3922,7 +4645,7 @@ module Polars
|
|
3922
4645
|
#
|
3923
4646
|
# @return [Expr]
|
3924
4647
|
def rolling_skew(window_size, bias: true)
|
3925
|
-
|
4648
|
+
_from_rbexpr(_rbexpr.rolling_skew(window_size, bias))
|
3926
4649
|
end
|
3927
4650
|
|
3928
4651
|
# Compute absolute values.
|
@@ -3949,7 +4672,7 @@ module Polars
|
|
3949
4672
|
# # │ 2.0 │
|
3950
4673
|
# # └─────┘
|
3951
4674
|
def abs
|
3952
|
-
|
4675
|
+
_from_rbexpr(_rbexpr.abs)
|
3953
4676
|
end
|
3954
4677
|
|
3955
4678
|
# Get the index values that would sort this column.
|
@@ -4044,7 +4767,7 @@ module Polars
|
|
4044
4767
|
# # │ 5 │
|
4045
4768
|
# # └─────┘
|
4046
4769
|
def rank(method: "average", reverse: false, seed: nil)
|
4047
|
-
|
4770
|
+
_from_rbexpr(_rbexpr.rank(method, reverse, seed))
|
4048
4771
|
end
|
4049
4772
|
|
4050
4773
|
# Calculate the n-th discrete difference.
|
@@ -4075,7 +4798,7 @@ module Polars
|
|
4075
4798
|
# # │ 20 │
|
4076
4799
|
# # └──────┘
|
4077
4800
|
def diff(n: 1, null_behavior: "ignore")
|
4078
|
-
|
4801
|
+
_from_rbexpr(_rbexpr.diff(n, null_behavior))
|
4079
4802
|
end
|
4080
4803
|
|
4081
4804
|
# Computes percentage change between values.
|
@@ -4112,7 +4835,7 @@ module Polars
|
|
4112
4835
|
# # └──────┴────────────┘
|
4113
4836
|
def pct_change(n: 1)
|
4114
4837
|
n = Utils.parse_as_expression(n)
|
4115
|
-
|
4838
|
+
_from_rbexpr(_rbexpr.pct_change(n))
|
4116
4839
|
end
|
4117
4840
|
|
4118
4841
|
# Compute the sample skewness of a data set.
|
@@ -4141,7 +4864,7 @@ module Polars
|
|
4141
4864
|
# # │ 0.343622 │
|
4142
4865
|
# # └──────────┘
|
4143
4866
|
def skew(bias: true)
|
4144
|
-
|
4867
|
+
_from_rbexpr(_rbexpr.skew(bias))
|
4145
4868
|
end
|
4146
4869
|
|
4147
4870
|
# Compute the kurtosis (Fisher or Pearson) of a dataset.
|
@@ -4173,7 +4896,7 @@ module Polars
|
|
4173
4896
|
# # │ -1.153061 │
|
4174
4897
|
# # └───────────┘
|
4175
4898
|
def kurtosis(fisher: true, bias: true)
|
4176
|
-
|
4899
|
+
_from_rbexpr(_rbexpr.kurtosis(fisher, bias))
|
4177
4900
|
end
|
4178
4901
|
|
4179
4902
|
# Set values outside the given boundaries to the boundary value.
|
@@ -4210,7 +4933,7 @@ module Polars
|
|
4210
4933
|
if !upper_bound.nil?
|
4211
4934
|
upper_bound = Utils.parse_as_expression(upper_bound, str_as_lit: true)
|
4212
4935
|
end
|
4213
|
-
|
4936
|
+
_from_rbexpr(_rbexpr.clip(lower_bound, upper_bound))
|
4214
4937
|
end
|
4215
4938
|
|
4216
4939
|
# Clip (limit) the values in an array to a `min` boundary.
|
@@ -4295,7 +5018,7 @@ module Polars
|
|
4295
5018
|
# # │ -9223372036854775808 │
|
4296
5019
|
# # └──────────────────────┘
|
4297
5020
|
def lower_bound
|
4298
|
-
|
5021
|
+
_from_rbexpr(_rbexpr.lower_bound)
|
4299
5022
|
end
|
4300
5023
|
|
4301
5024
|
# Calculate the upper bound.
|
@@ -4318,7 +5041,7 @@ module Polars
|
|
4318
5041
|
# # │ 9223372036854775807 │
|
4319
5042
|
# # └─────────────────────┘
|
4320
5043
|
def upper_bound
|
4321
|
-
|
5044
|
+
_from_rbexpr(_rbexpr.upper_bound)
|
4322
5045
|
end
|
4323
5046
|
|
4324
5047
|
# Compute the element-wise indication of the sign.
|
@@ -4342,7 +5065,7 @@ module Polars
|
|
4342
5065
|
# # │ null │
|
4343
5066
|
# # └──────┘
|
4344
5067
|
def sign
|
4345
|
-
|
5068
|
+
_from_rbexpr(_rbexpr.sign)
|
4346
5069
|
end
|
4347
5070
|
|
4348
5071
|
# Compute the element-wise value for the sine.
|
@@ -4362,7 +5085,7 @@ module Polars
|
|
4362
5085
|
# # │ 0.0 │
|
4363
5086
|
# # └─────┘
|
4364
5087
|
def sin
|
4365
|
-
|
5088
|
+
_from_rbexpr(_rbexpr.sin)
|
4366
5089
|
end
|
4367
5090
|
|
4368
5091
|
# Compute the element-wise value for the cosine.
|
@@ -4382,7 +5105,7 @@ module Polars
|
|
4382
5105
|
# # │ 1.0 │
|
4383
5106
|
# # └─────┘
|
4384
5107
|
def cos
|
4385
|
-
|
5108
|
+
_from_rbexpr(_rbexpr.cos)
|
4386
5109
|
end
|
4387
5110
|
|
4388
5111
|
# Compute the element-wise value for the tangent.
|
@@ -4402,7 +5125,7 @@ module Polars
|
|
4402
5125
|
# # │ 1.557408 │
|
4403
5126
|
# # └──────────┘
|
4404
5127
|
def tan
|
4405
|
-
|
5128
|
+
_from_rbexpr(_rbexpr.tan)
|
4406
5129
|
end
|
4407
5130
|
|
4408
5131
|
# Compute the element-wise value for the inverse sine.
|
@@ -4422,7 +5145,7 @@ module Polars
|
|
4422
5145
|
# # │ 1.570796 │
|
4423
5146
|
# # └──────────┘
|
4424
5147
|
def arcsin
|
4425
|
-
|
5148
|
+
_from_rbexpr(_rbexpr.arcsin)
|
4426
5149
|
end
|
4427
5150
|
|
4428
5151
|
# Compute the element-wise value for the inverse cosine.
|
@@ -4442,7 +5165,7 @@ module Polars
|
|
4442
5165
|
# # │ 1.570796 │
|
4443
5166
|
# # └──────────┘
|
4444
5167
|
def arccos
|
4445
|
-
|
5168
|
+
_from_rbexpr(_rbexpr.arccos)
|
4446
5169
|
end
|
4447
5170
|
|
4448
5171
|
# Compute the element-wise value for the inverse tangent.
|
@@ -4462,7 +5185,7 @@ module Polars
|
|
4462
5185
|
# # │ 0.785398 │
|
4463
5186
|
# # └──────────┘
|
4464
5187
|
def arctan
|
4465
|
-
|
5188
|
+
_from_rbexpr(_rbexpr.arctan)
|
4466
5189
|
end
|
4467
5190
|
|
4468
5191
|
# Compute the element-wise value for the hyperbolic sine.
|
@@ -4482,7 +5205,7 @@ module Polars
|
|
4482
5205
|
# # │ 1.175201 │
|
4483
5206
|
# # └──────────┘
|
4484
5207
|
def sinh
|
4485
|
-
|
5208
|
+
_from_rbexpr(_rbexpr.sinh)
|
4486
5209
|
end
|
4487
5210
|
|
4488
5211
|
# Compute the element-wise value for the hyperbolic cosine.
|
@@ -4502,7 +5225,7 @@ module Polars
|
|
4502
5225
|
# # │ 1.543081 │
|
4503
5226
|
# # └──────────┘
|
4504
5227
|
def cosh
|
4505
|
-
|
5228
|
+
_from_rbexpr(_rbexpr.cosh)
|
4506
5229
|
end
|
4507
5230
|
|
4508
5231
|
# Compute the element-wise value for the hyperbolic tangent.
|
@@ -4522,7 +5245,7 @@ module Polars
|
|
4522
5245
|
# # │ 0.761594 │
|
4523
5246
|
# # └──────────┘
|
4524
5247
|
def tanh
|
4525
|
-
|
5248
|
+
_from_rbexpr(_rbexpr.tanh)
|
4526
5249
|
end
|
4527
5250
|
|
4528
5251
|
# Compute the element-wise value for the inverse hyperbolic sine.
|
@@ -4542,7 +5265,7 @@ module Polars
|
|
4542
5265
|
# # │ 0.881374 │
|
4543
5266
|
# # └──────────┘
|
4544
5267
|
def arcsinh
|
4545
|
-
|
5268
|
+
_from_rbexpr(_rbexpr.arcsinh)
|
4546
5269
|
end
|
4547
5270
|
|
4548
5271
|
# Compute the element-wise value for the inverse hyperbolic cosine.
|
@@ -4562,7 +5285,7 @@ module Polars
|
|
4562
5285
|
# # │ 0.0 │
|
4563
5286
|
# # └─────┘
|
4564
5287
|
def arccosh
|
4565
|
-
|
5288
|
+
_from_rbexpr(_rbexpr.arccosh)
|
4566
5289
|
end
|
4567
5290
|
|
4568
5291
|
# Compute the element-wise value for the inverse hyperbolic tangent.
|
@@ -4582,7 +5305,7 @@ module Polars
|
|
4582
5305
|
# # │ inf │
|
4583
5306
|
# # └─────┘
|
4584
5307
|
def arctanh
|
4585
|
-
|
5308
|
+
_from_rbexpr(_rbexpr.arctanh)
|
4586
5309
|
end
|
4587
5310
|
|
4588
5311
|
# Reshape this Expr to a flat Series or a Series of Lists.
|
@@ -4608,7 +5331,7 @@ module Polars
|
|
4608
5331
|
# # │ [7, 8, 9] │
|
4609
5332
|
# # └───────────┘
|
4610
5333
|
def reshape(dims)
|
4611
|
-
|
5334
|
+
_from_rbexpr(_rbexpr.reshape(dims))
|
4612
5335
|
end
|
4613
5336
|
|
4614
5337
|
# Shuffle the contents of this expr.
|
@@ -4637,7 +5360,7 @@ module Polars
|
|
4637
5360
|
if seed.nil?
|
4638
5361
|
seed = rand(10000)
|
4639
5362
|
end
|
4640
|
-
|
5363
|
+
_from_rbexpr(_rbexpr.shuffle(seed))
|
4641
5364
|
end
|
4642
5365
|
|
4643
5366
|
# Sample from this expression.
|
@@ -4683,14 +5406,14 @@ module Polars
|
|
4683
5406
|
|
4684
5407
|
if !n.nil? && frac.nil?
|
4685
5408
|
n = Utils.parse_as_expression(n)
|
4686
|
-
return
|
5409
|
+
return _from_rbexpr(_rbexpr.sample_n(n, with_replacement, shuffle, seed))
|
4687
5410
|
end
|
4688
5411
|
|
4689
5412
|
if frac.nil?
|
4690
5413
|
frac = 1.0
|
4691
5414
|
end
|
4692
5415
|
frac = Utils.parse_as_expression(frac)
|
4693
|
-
|
5416
|
+
_from_rbexpr(
|
4694
5417
|
_rbexpr.sample_frac(frac, with_replacement, shuffle, seed)
|
4695
5418
|
)
|
4696
5419
|
end
|
@@ -4723,7 +5446,7 @@ module Polars
|
|
4723
5446
|
ignore_nulls: true
|
4724
5447
|
)
|
4725
5448
|
alpha = _prepare_alpha(com, span, half_life, alpha)
|
4726
|
-
|
5449
|
+
_from_rbexpr(_rbexpr.ewm_mean(alpha, adjust, min_periods, ignore_nulls))
|
4727
5450
|
end
|
4728
5451
|
|
4729
5452
|
# Exponentially-weighted moving standard deviation.
|
@@ -4755,7 +5478,7 @@ module Polars
|
|
4755
5478
|
ignore_nulls: true
|
4756
5479
|
)
|
4757
5480
|
alpha = _prepare_alpha(com, span, half_life, alpha)
|
4758
|
-
|
5481
|
+
_from_rbexpr(_rbexpr.ewm_std(alpha, adjust, bias, min_periods, ignore_nulls))
|
4759
5482
|
end
|
4760
5483
|
|
4761
5484
|
# Exponentially-weighted moving variance.
|
@@ -4787,7 +5510,7 @@ module Polars
|
|
4787
5510
|
ignore_nulls: true
|
4788
5511
|
)
|
4789
5512
|
alpha = _prepare_alpha(com, span, half_life, alpha)
|
4790
|
-
|
5513
|
+
_from_rbexpr(_rbexpr.ewm_var(alpha, adjust, bias, min_periods, ignore_nulls))
|
4791
5514
|
end
|
4792
5515
|
|
4793
5516
|
# Extend the Series with given number of values.
|
@@ -4817,7 +5540,7 @@ module Polars
|
|
4817
5540
|
# # │ 99 │
|
4818
5541
|
# # └────────┘
|
4819
5542
|
def extend_constant(value, n)
|
4820
|
-
|
5543
|
+
_from_rbexpr(_rbexpr.extend_constant(value, n))
|
4821
5544
|
end
|
4822
5545
|
|
4823
5546
|
# Count all unique values and create a struct mapping value to count.
|
@@ -4853,7 +5576,7 @@ module Polars
|
|
4853
5576
|
# # │ {"a",1} │
|
4854
5577
|
# # └───────────┘
|
4855
5578
|
def value_counts(multithreaded: false, sort: false)
|
4856
|
-
|
5579
|
+
_from_rbexpr(_rbexpr.value_counts(multithreaded, sort))
|
4857
5580
|
end
|
4858
5581
|
|
4859
5582
|
# Return a count of the unique values in the order of appearance.
|
@@ -4886,7 +5609,7 @@ module Polars
|
|
4886
5609
|
# # │ 3 │
|
4887
5610
|
# # └─────┘
|
4888
5611
|
def unique_counts
|
4889
|
-
|
5612
|
+
_from_rbexpr(_rbexpr.unique_counts)
|
4890
5613
|
end
|
4891
5614
|
|
4892
5615
|
# Compute the logarithm to a given base.
|
@@ -4911,7 +5634,7 @@ module Polars
|
|
4911
5634
|
# # │ 1.584963 │
|
4912
5635
|
# # └──────────┘
|
4913
5636
|
def log(base = Math::E)
|
4914
|
-
|
5637
|
+
_from_rbexpr(_rbexpr.log(base))
|
4915
5638
|
end
|
4916
5639
|
|
4917
5640
|
# Computes the entropy.
|
@@ -4950,7 +5673,7 @@ module Polars
|
|
4950
5673
|
# # │ -6.754888 │
|
4951
5674
|
# # └───────────┘
|
4952
5675
|
def entropy(base: 2, normalize: true)
|
4953
|
-
|
5676
|
+
_from_rbexpr(_rbexpr.entropy(base, normalize))
|
4954
5677
|
end
|
4955
5678
|
|
4956
5679
|
# Run an expression over a sliding window that increases `1` slot every iteration.
|
@@ -4997,7 +5720,7 @@ module Polars
|
|
4997
5720
|
# # │ -24.0 │
|
4998
5721
|
# # └────────┘
|
4999
5722
|
def cumulative_eval(expr, min_periods: 1, parallel: false)
|
5000
|
-
|
5723
|
+
_from_rbexpr(
|
5001
5724
|
_rbexpr.cumulative_eval(expr._rbexpr, min_periods, parallel)
|
5002
5725
|
)
|
5003
5726
|
end
|
@@ -5028,7 +5751,7 @@ module Polars
|
|
5028
5751
|
# # │ 3 │
|
5029
5752
|
# # └────────┘
|
5030
5753
|
def set_sorted(descending: false)
|
5031
|
-
|
5754
|
+
_from_rbexpr(_rbexpr.set_sorted_flag(descending))
|
5032
5755
|
end
|
5033
5756
|
|
5034
5757
|
# Aggregate to list.
|
@@ -5053,7 +5776,7 @@ module Polars
|
|
5053
5776
|
# # │ [1, 2, 3] ┆ [4, 5, 6] │
|
5054
5777
|
# # └───────────┴───────────┘
|
5055
5778
|
def implode
|
5056
|
-
|
5779
|
+
_from_rbexpr(_rbexpr.implode)
|
5057
5780
|
end
|
5058
5781
|
|
5059
5782
|
# Shrink numeric columns to the minimal required datatype.
|
@@ -5088,7 +5811,169 @@ module Polars
|
|
5088
5811
|
# # │ 3 ┆ 8589934592 ┆ 1073741824 ┆ 112 ┆ 129 ┆ c ┆ 0.12 ┆ false │
|
5089
5812
|
# # └─────┴────────────┴────────────┴──────┴──────┴─────┴──────┴───────┘
|
5090
5813
|
def shrink_dtype
|
5091
|
-
|
5814
|
+
_from_rbexpr(_rbexpr.shrink_dtype)
|
5815
|
+
end
|
5816
|
+
|
5817
|
+
# Replace values by different values.
|
5818
|
+
#
|
5819
|
+
# @param old [Object]
|
5820
|
+
# Value or sequence of values to replace.
|
5821
|
+
# Accepts expression input. Sequences are parsed as Series,
|
5822
|
+
# other non-expression inputs are parsed as literals.
|
5823
|
+
# Also accepts a mapping of values to their replacement.
|
5824
|
+
# @param new [Object]
|
5825
|
+
# Value or sequence of values to replace by.
|
5826
|
+
# Accepts expression input. Sequences are parsed as Series,
|
5827
|
+
# other non-expression inputs are parsed as literals.
|
5828
|
+
# Length must match the length of `old` or have length 1.
|
5829
|
+
# @param default [Object]
|
5830
|
+
# Set values that were not replaced to this value.
|
5831
|
+
# Defaults to keeping the original value.
|
5832
|
+
# Accepts expression input. Non-expression inputs are parsed as literals.
|
5833
|
+
# @param return_dtype [Object]
|
5834
|
+
# The data type of the resulting expression. If set to `nil` (default),
|
5835
|
+
# the data type is determined automatically based on the other inputs.
|
5836
|
+
#
|
5837
|
+
# @return [Expr]
|
5838
|
+
#
|
5839
|
+
# @example Replace a single value by another value. Values that were not replaced remain unchanged.
|
5840
|
+
# df = Polars::DataFrame.new({"a" => [1, 2, 2, 3]})
|
5841
|
+
# df.with_columns(replaced: Polars.col("a").replace(2, 100))
|
5842
|
+
# # =>
|
5843
|
+
# # shape: (4, 2)
|
5844
|
+
# # ┌─────┬──────────┐
|
5845
|
+
# # │ a ┆ replaced │
|
5846
|
+
# # │ --- ┆ --- │
|
5847
|
+
# # │ i64 ┆ i64 │
|
5848
|
+
# # ╞═════╪══════════╡
|
5849
|
+
# # │ 1 ┆ 1 │
|
5850
|
+
# # │ 2 ┆ 100 │
|
5851
|
+
# # │ 2 ┆ 100 │
|
5852
|
+
# # │ 3 ┆ 3 │
|
5853
|
+
# # └─────┴──────────┘
|
5854
|
+
#
|
5855
|
+
# @example Replace multiple values by passing sequences to the `old` and `new` parameters.
|
5856
|
+
# df.with_columns(replaced: Polars.col("a").replace([2, 3], [100, 200]))
|
5857
|
+
# # =>
|
5858
|
+
# # shape: (4, 2)
|
5859
|
+
# # ┌─────┬──────────┐
|
5860
|
+
# # │ a ┆ replaced │
|
5861
|
+
# # │ --- ┆ --- │
|
5862
|
+
# # │ i64 ┆ i64 │
|
5863
|
+
# # ╞═════╪══════════╡
|
5864
|
+
# # │ 1 ┆ 1 │
|
5865
|
+
# # │ 2 ┆ 100 │
|
5866
|
+
# # │ 2 ┆ 100 │
|
5867
|
+
# # │ 3 ┆ 200 │
|
5868
|
+
# # └─────┴──────────┘
|
5869
|
+
#
|
5870
|
+
# @example Passing a mapping with replacements is also supported as syntactic sugar. Specify a default to set all values that were not matched.
|
5871
|
+
# mapping = {2 => 100, 3 => 200}
|
5872
|
+
# df.with_columns(replaced: Polars.col("a").replace(mapping, default: -1))
|
5873
|
+
# # =>
|
5874
|
+
# # shape: (4, 2)
|
5875
|
+
# # ┌─────┬──────────┐
|
5876
|
+
# # │ a ┆ replaced │
|
5877
|
+
# # │ --- ┆ --- │
|
5878
|
+
# # │ i64 ┆ i64 │
|
5879
|
+
# # ╞═════╪══════════╡
|
5880
|
+
# # │ 1 ┆ -1 │
|
5881
|
+
# # │ 2 ┆ 100 │
|
5882
|
+
# # │ 2 ┆ 100 │
|
5883
|
+
# # │ 3 ┆ 200 │
|
5884
|
+
# # └─────┴──────────┘
|
5885
|
+
#
|
5886
|
+
# @example Replacing by values of a different data type sets the return type based on a combination of the `new` data type and either the original data type or the default data type if it was set.
|
5887
|
+
# df = Polars::DataFrame.new({"a" => ["x", "y", "z"]})
|
5888
|
+
# mapping = {"x" => 1, "y" => 2, "z" => 3}
|
5889
|
+
# df.with_columns(replaced: Polars.col("a").replace(mapping))
|
5890
|
+
# # =>
|
5891
|
+
# # shape: (3, 2)
|
5892
|
+
# # ┌─────┬──────────┐
|
5893
|
+
# # │ a ┆ replaced │
|
5894
|
+
# # │ --- ┆ --- │
|
5895
|
+
# # │ str ┆ str │
|
5896
|
+
# # ╞═════╪══════════╡
|
5897
|
+
# # │ x ┆ 1 │
|
5898
|
+
# # │ y ┆ 2 │
|
5899
|
+
# # │ z ┆ 3 │
|
5900
|
+
# # └─────┴──────────┘
|
5901
|
+
#
|
5902
|
+
# @example
|
5903
|
+
# df.with_columns(replaced: Polars.col("a").replace(mapping, default: nil))
|
5904
|
+
# # =>
|
5905
|
+
# # shape: (3, 2)
|
5906
|
+
# # ┌─────┬──────────┐
|
5907
|
+
# # │ a ┆ replaced │
|
5908
|
+
# # │ --- ┆ --- │
|
5909
|
+
# # │ str ┆ i64 │
|
5910
|
+
# # ╞═════╪══════════╡
|
5911
|
+
# # │ x ┆ 1 │
|
5912
|
+
# # │ y ┆ 2 │
|
5913
|
+
# # │ z ┆ 3 │
|
5914
|
+
# # └─────┴──────────┘
|
5915
|
+
#
|
5916
|
+
# @example Set the `return_dtype` parameter to control the resulting data type directly.
|
5917
|
+
# df.with_columns(
|
5918
|
+
# replaced: Polars.col("a").replace(mapping, return_dtype: Polars::UInt8)
|
5919
|
+
# )
|
5920
|
+
# # =>
|
5921
|
+
# # shape: (3, 2)
|
5922
|
+
# # ┌─────┬──────────┐
|
5923
|
+
# # │ a ┆ replaced │
|
5924
|
+
# # │ --- ┆ --- │
|
5925
|
+
# # │ str ┆ u8 │
|
5926
|
+
# # ╞═════╪══════════╡
|
5927
|
+
# # │ x ┆ 1 │
|
5928
|
+
# # │ y ┆ 2 │
|
5929
|
+
# # │ z ┆ 3 │
|
5930
|
+
# # └─────┴──────────┘
|
5931
|
+
#
|
5932
|
+
# @example Expression input is supported for all parameters.
|
5933
|
+
# df = Polars::DataFrame.new({"a" => [1, 2, 2, 3], "b" => [1.5, 2.5, 5.0, 1.0]})
|
5934
|
+
# df.with_columns(
|
5935
|
+
# replaced: Polars.col("a").replace(
|
5936
|
+
# Polars.col("a").max,
|
5937
|
+
# Polars.col("b").sum,
|
5938
|
+
# default: Polars.col("b")
|
5939
|
+
# )
|
5940
|
+
# )
|
5941
|
+
# # =>
|
5942
|
+
# # shape: (4, 3)
|
5943
|
+
# # ┌─────┬─────┬──────────┐
|
5944
|
+
# # │ a ┆ b ┆ replaced │
|
5945
|
+
# # │ --- ┆ --- ┆ --- │
|
5946
|
+
# # │ i64 ┆ f64 ┆ f64 │
|
5947
|
+
# # ╞═════╪═════╪══════════╡
|
5948
|
+
# # │ 1 ┆ 1.5 ┆ 1.5 │
|
5949
|
+
# # │ 2 ┆ 2.5 ┆ 2.5 │
|
5950
|
+
# # │ 2 ┆ 5.0 ┆ 5.0 │
|
5951
|
+
# # │ 3 ┆ 1.0 ┆ 10.0 │
|
5952
|
+
# # └─────┴─────┴──────────┘
|
5953
|
+
def replace(old, new = NO_DEFAULT, default: NO_DEFAULT, return_dtype: nil)
|
5954
|
+
if new.eql?(NO_DEFAULT) && old.is_a?(Hash)
|
5955
|
+
new = Series.new(old.values)
|
5956
|
+
old = Series.new(old.keys)
|
5957
|
+
else
|
5958
|
+
if old.is_a?(::Array)
|
5959
|
+
old = Series.new(old)
|
5960
|
+
end
|
5961
|
+
if new.is_a?(::Array)
|
5962
|
+
new = Series.new(new)
|
5963
|
+
end
|
5964
|
+
end
|
5965
|
+
|
5966
|
+
old = Utils.parse_as_expression(old, str_as_lit: true)
|
5967
|
+
new = Utils.parse_as_expression(new, str_as_lit: true)
|
5968
|
+
|
5969
|
+
default =
|
5970
|
+
if default.eql?(NO_DEFAULT)
|
5971
|
+
nil
|
5972
|
+
else
|
5973
|
+
Utils.parse_as_expression(default, str_as_lit: true)
|
5974
|
+
end
|
5975
|
+
|
5976
|
+
_from_rbexpr(_rbexpr.replace(old, new, default, return_dtype))
|
5092
5977
|
end
|
5093
5978
|
|
5094
5979
|
# Create an object namespace of all list related methods.
|
@@ -5156,7 +6041,7 @@ module Polars
|
|
5156
6041
|
|
5157
6042
|
private
|
5158
6043
|
|
5159
|
-
def
|
6044
|
+
def _from_rbexpr(expr)
|
5160
6045
|
Utils.wrap_expr(expr)
|
5161
6046
|
end
|
5162
6047
|
|