polars-df 0.8.0-arm64-darwin → 0.10.0-arm64-darwin
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +42 -1
- data/Cargo.lock +159 -66
- data/Cargo.toml +0 -3
- data/LICENSE-THIRD-PARTY.txt +3112 -1613
- data/LICENSE.txt +1 -1
- data/README.md +3 -2
- data/lib/polars/3.1/polars.bundle +0 -0
- data/lib/polars/3.2/polars.bundle +0 -0
- data/lib/polars/3.3/polars.bundle +0 -0
- data/lib/polars/array_expr.rb +453 -0
- data/lib/polars/array_name_space.rb +346 -0
- data/lib/polars/batched_csv_reader.rb +4 -2
- 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 +306 -96
- data/lib/polars/data_types.rb +191 -28
- data/lib/polars/date_time_expr.rb +41 -18
- data/lib/polars/date_time_name_space.rb +9 -3
- data/lib/polars/exceptions.rb +12 -1
- data/lib/polars/expr.rb +898 -215
- 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 +96 -0
- data/lib/polars/functions.rb +29 -416
- data/lib/polars/group_by.rb +2 -2
- data/lib/polars/io.rb +36 -31
- data/lib/polars/lazy_frame.rb +405 -88
- data/lib/polars/list_expr.rb +158 -8
- data/lib/polars/list_name_space.rb +102 -0
- data/lib/polars/meta_expr.rb +175 -7
- data/lib/polars/series.rb +282 -41
- data/lib/polars/string_cache.rb +75 -0
- data/lib/polars/string_expr.rb +413 -96
- data/lib/polars/string_name_space.rb +4 -4
- data/lib/polars/testing.rb +507 -0
- data/lib/polars/utils.rb +106 -8
- data/lib/polars/version.rb +1 -1
- data/lib/polars/whenthen.rb +83 -0
- data/lib/polars.rb +16 -4
- metadata +34 -6
- data/lib/polars/lazy_functions.rb +0 -1181
- data/lib/polars/when.rb +0 -16
- data/lib/polars/when_then.rb +0 -19
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
|
@@ -368,10 +365,10 @@ module Polars
|
|
368
365
|
def exclude(columns)
|
369
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
374
|
if !columns.all? { |a| a.is_a?(::String) } || !columns.all? { |a| Utils.is_polars_dtype(a) }
|
@@ -379,9 +376,9 @@ module Polars
|
|
379
376
|
end
|
380
377
|
|
381
378
|
if columns[0].is_a?(::String)
|
382
|
-
|
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,12 +716,10 @@ module Polars
|
|
718
716
|
# # │ --- ┆ --- │
|
719
717
|
# # │ u32 ┆ u32 │
|
720
718
|
# # ╞═════╪═════╡
|
721
|
-
# # │ 3 ┆
|
719
|
+
# # │ 3 ┆ 2 │
|
722
720
|
# # └─────┴─────┘
|
723
721
|
def count
|
724
|
-
|
725
|
-
# wrap_expr(_rbexpr.count)
|
726
|
-
wrap_expr(_rbexpr.len)
|
722
|
+
_from_rbexpr(_rbexpr.count)
|
727
723
|
end
|
728
724
|
|
729
725
|
# Count the number of values in this expression.
|
@@ -743,7 +739,7 @@ module Polars
|
|
743
739
|
# # │ 3 ┆ 3 │
|
744
740
|
# # └─────┴─────┘
|
745
741
|
def len
|
746
|
-
|
742
|
+
_from_rbexpr(_rbexpr.len)
|
747
743
|
end
|
748
744
|
alias_method :length, :len
|
749
745
|
|
@@ -782,7 +778,7 @@ module Polars
|
|
782
778
|
if !length.is_a?(Expr)
|
783
779
|
length = Polars.lit(length)
|
784
780
|
end
|
785
|
-
|
781
|
+
_from_rbexpr(_rbexpr.slice(offset._rbexpr, length._rbexpr))
|
786
782
|
end
|
787
783
|
|
788
784
|
# Append expressions.
|
@@ -816,7 +812,7 @@ module Polars
|
|
816
812
|
# # └─────┴──────┘
|
817
813
|
def append(other, upcast: true)
|
818
814
|
other = Utils.expr_to_lit_or_expr(other)
|
819
|
-
|
815
|
+
_from_rbexpr(_rbexpr.append(other._rbexpr, upcast))
|
820
816
|
end
|
821
817
|
|
822
818
|
# Create a single chunk of memory for this Series.
|
@@ -841,7 +837,7 @@ module Polars
|
|
841
837
|
# # │ 2 │
|
842
838
|
# # └────────┘
|
843
839
|
def rechunk
|
844
|
-
|
840
|
+
_from_rbexpr(_rbexpr.rechunk)
|
845
841
|
end
|
846
842
|
|
847
843
|
# Drop null values.
|
@@ -868,7 +864,7 @@ module Polars
|
|
868
864
|
# # │ NaN │
|
869
865
|
# # └─────┘
|
870
866
|
def drop_nulls
|
871
|
-
|
867
|
+
_from_rbexpr(_rbexpr.drop_nulls)
|
872
868
|
end
|
873
869
|
|
874
870
|
# Drop floating point NaN values.
|
@@ -895,7 +891,7 @@ module Polars
|
|
895
891
|
# # │ 4.0 │
|
896
892
|
# # └──────┘
|
897
893
|
def drop_nans
|
898
|
-
|
894
|
+
_from_rbexpr(_rbexpr.drop_nans)
|
899
895
|
end
|
900
896
|
|
901
897
|
# Get an array with the cumulative sum computed at every element.
|
@@ -930,7 +926,7 @@ module Polars
|
|
930
926
|
# # │ 10 ┆ 4 │
|
931
927
|
# # └─────┴───────────┘
|
932
928
|
def cum_sum(reverse: false)
|
933
|
-
|
929
|
+
_from_rbexpr(_rbexpr.cum_sum(reverse))
|
934
930
|
end
|
935
931
|
alias_method :cumsum, :cum_sum
|
936
932
|
|
@@ -966,7 +962,7 @@ module Polars
|
|
966
962
|
# # │ 24 ┆ 4 │
|
967
963
|
# # └─────┴───────────┘
|
968
964
|
def cum_prod(reverse: false)
|
969
|
-
|
965
|
+
_from_rbexpr(_rbexpr.cum_prod(reverse))
|
970
966
|
end
|
971
967
|
alias_method :cumprod, :cum_prod
|
972
968
|
|
@@ -998,7 +994,7 @@ module Polars
|
|
998
994
|
# # │ 1 ┆ 4 │
|
999
995
|
# # └─────┴───────────┘
|
1000
996
|
def cum_min(reverse: false)
|
1001
|
-
|
997
|
+
_from_rbexpr(_rbexpr.cum_min(reverse))
|
1002
998
|
end
|
1003
999
|
alias_method :cummin, :cum_min
|
1004
1000
|
|
@@ -1030,7 +1026,7 @@ module Polars
|
|
1030
1026
|
# # │ 4 ┆ 4 │
|
1031
1027
|
# # └─────┴───────────┘
|
1032
1028
|
def cum_max(reverse: false)
|
1033
|
-
|
1029
|
+
_from_rbexpr(_rbexpr.cum_max(reverse))
|
1034
1030
|
end
|
1035
1031
|
alias_method :cummax, :cum_max
|
1036
1032
|
|
@@ -1044,27 +1040,27 @@ module Polars
|
|
1044
1040
|
# @return [Expr]
|
1045
1041
|
#
|
1046
1042
|
# @example
|
1047
|
-
# df = Polars::DataFrame.new({"a" => [
|
1048
|
-
# df.
|
1043
|
+
# df = Polars::DataFrame.new({"a" => ["x", "k", nil, "d"]})
|
1044
|
+
# df.with_columns(
|
1049
1045
|
# [
|
1050
|
-
# Polars.col("a").cum_count,
|
1051
|
-
# 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")
|
1052
1048
|
# ]
|
1053
1049
|
# )
|
1054
1050
|
# # =>
|
1055
|
-
# # shape: (4,
|
1056
|
-
# #
|
1057
|
-
# # │ a
|
1058
|
-
# # │ --- ┆ ---
|
1059
|
-
# # │ u32
|
1060
|
-
# #
|
1061
|
-
# # │
|
1062
|
-
# # │
|
1063
|
-
# # │ 2
|
1064
|
-
# # │ 3
|
1065
|
-
# #
|
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
|
+
# # └──────┴───────────┴───────────────────┘
|
1066
1062
|
def cum_count(reverse: false)
|
1067
|
-
|
1063
|
+
_from_rbexpr(_rbexpr.cum_count(reverse))
|
1068
1064
|
end
|
1069
1065
|
alias_method :cumcount, :cum_count
|
1070
1066
|
|
@@ -1090,7 +1086,7 @@ module Polars
|
|
1090
1086
|
# # │ 1.0 │
|
1091
1087
|
# # └─────┘
|
1092
1088
|
def floor
|
1093
|
-
|
1089
|
+
_from_rbexpr(_rbexpr.floor)
|
1094
1090
|
end
|
1095
1091
|
|
1096
1092
|
# Rounds up to the nearest integer value.
|
@@ -1115,7 +1111,7 @@ module Polars
|
|
1115
1111
|
# # │ 2.0 │
|
1116
1112
|
# # └─────┘
|
1117
1113
|
def ceil
|
1118
|
-
|
1114
|
+
_from_rbexpr(_rbexpr.ceil)
|
1119
1115
|
end
|
1120
1116
|
|
1121
1117
|
# Round underlying floating point data by `decimals` digits.
|
@@ -1141,7 +1137,7 @@ module Polars
|
|
1141
1137
|
# # │ 1.2 │
|
1142
1138
|
# # └─────┘
|
1143
1139
|
def round(decimals = 0)
|
1144
|
-
|
1140
|
+
_from_rbexpr(_rbexpr.round(decimals))
|
1145
1141
|
end
|
1146
1142
|
|
1147
1143
|
# Compute the dot/inner product between two Expressions.
|
@@ -1170,7 +1166,7 @@ module Polars
|
|
1170
1166
|
# # └─────┘
|
1171
1167
|
def dot(other)
|
1172
1168
|
other = Utils.expr_to_lit_or_expr(other, str_to_lit: false)
|
1173
|
-
|
1169
|
+
_from_rbexpr(_rbexpr.dot(other._rbexpr))
|
1174
1170
|
end
|
1175
1171
|
|
1176
1172
|
# Compute the most occurring value(s).
|
@@ -1198,7 +1194,7 @@ module Polars
|
|
1198
1194
|
# # │ 1 ┆ 2 │
|
1199
1195
|
# # └─────┴─────┘
|
1200
1196
|
def mode
|
1201
|
-
|
1197
|
+
_from_rbexpr(_rbexpr.mode)
|
1202
1198
|
end
|
1203
1199
|
|
1204
1200
|
# Cast between data types.
|
@@ -1237,7 +1233,7 @@ module Polars
|
|
1237
1233
|
# # └─────┴─────┘
|
1238
1234
|
def cast(dtype, strict: true)
|
1239
1235
|
dtype = Utils.rb_type_to_dtype(dtype)
|
1240
|
-
|
1236
|
+
_from_rbexpr(_rbexpr.cast(dtype, strict))
|
1241
1237
|
end
|
1242
1238
|
|
1243
1239
|
# Sort this column. In projection/ selection context the whole column is sorted.
|
@@ -1312,7 +1308,7 @@ module Polars
|
|
1312
1308
|
# # │ one ┆ [1, 2, 98] │
|
1313
1309
|
# # └───────┴────────────┘
|
1314
1310
|
def sort(reverse: false, nulls_last: false)
|
1315
|
-
|
1311
|
+
_from_rbexpr(_rbexpr.sort_with(reverse, nulls_last))
|
1316
1312
|
end
|
1317
1313
|
|
1318
1314
|
# Return the `k` largest elements.
|
@@ -1351,7 +1347,7 @@ module Polars
|
|
1351
1347
|
# # └───────┴──────────┘
|
1352
1348
|
def top_k(k: 5)
|
1353
1349
|
k = Utils.parse_as_expression(k)
|
1354
|
-
|
1350
|
+
_from_rbexpr(_rbexpr.top_k(k))
|
1355
1351
|
end
|
1356
1352
|
|
1357
1353
|
# Return the `k` smallest elements.
|
@@ -1390,7 +1386,7 @@ module Polars
|
|
1390
1386
|
# # └───────┴──────────┘
|
1391
1387
|
def bottom_k(k: 5)
|
1392
1388
|
k = Utils.parse_as_expression(k)
|
1393
|
-
|
1389
|
+
_from_rbexpr(_rbexpr.bottom_k(k))
|
1394
1390
|
end
|
1395
1391
|
|
1396
1392
|
# Get the index values that would sort this column.
|
@@ -1421,7 +1417,7 @@ module Polars
|
|
1421
1417
|
# # │ 2 │
|
1422
1418
|
# # └─────┘
|
1423
1419
|
def arg_sort(reverse: false, nulls_last: false)
|
1424
|
-
|
1420
|
+
_from_rbexpr(_rbexpr.arg_sort(reverse, nulls_last))
|
1425
1421
|
end
|
1426
1422
|
|
1427
1423
|
# Get the index of the maximal value.
|
@@ -1445,7 +1441,7 @@ module Polars
|
|
1445
1441
|
# # │ 2 │
|
1446
1442
|
# # └─────┘
|
1447
1443
|
def arg_max
|
1448
|
-
|
1444
|
+
_from_rbexpr(_rbexpr.arg_max)
|
1449
1445
|
end
|
1450
1446
|
|
1451
1447
|
# Get the index of the minimal value.
|
@@ -1469,7 +1465,7 @@ module Polars
|
|
1469
1465
|
# # │ 1 │
|
1470
1466
|
# # └─────┘
|
1471
1467
|
def arg_min
|
1472
|
-
|
1468
|
+
_from_rbexpr(_rbexpr.arg_min)
|
1473
1469
|
end
|
1474
1470
|
|
1475
1471
|
# Find indices where elements should be inserted to maintain order.
|
@@ -1503,7 +1499,7 @@ module Polars
|
|
1503
1499
|
# # └──────┴───────┴─────┘
|
1504
1500
|
def search_sorted(element, side: "any")
|
1505
1501
|
element = Utils.expr_to_lit_or_expr(element, str_to_lit: false)
|
1506
|
-
|
1502
|
+
_from_rbexpr(_rbexpr.search_sorted(element._rbexpr, side))
|
1507
1503
|
end
|
1508
1504
|
|
1509
1505
|
# Sort this column by the ordering of another column, or multiple other columns.
|
@@ -1548,16 +1544,14 @@ module Polars
|
|
1548
1544
|
# # │ one │
|
1549
1545
|
# # │ two │
|
1550
1546
|
# # └───────┘
|
1551
|
-
def sort_by(by, reverse: false)
|
1552
|
-
|
1553
|
-
by = [by]
|
1554
|
-
end
|
1547
|
+
def sort_by(by, *more_by, reverse: false, nulls_last: false, multithreaded: true, maintain_order: false)
|
1548
|
+
by = Utils.parse_as_list_of_expressions(by, *more_by)
|
1555
1549
|
if !reverse.is_a?(::Array)
|
1556
1550
|
reverse = [reverse]
|
1551
|
+
elsif by.length != reverse.length
|
1552
|
+
raise ArgumentError, "the length of `reverse` (#{reverse.length}) does not match the length of `by` (#{by.length})"
|
1557
1553
|
end
|
1558
|
-
by
|
1559
|
-
|
1560
|
-
wrap_expr(_rbexpr.sort_by(by, reverse))
|
1554
|
+
_from_rbexpr(_rbexpr.sort_by(by, reverse, nulls_last, multithreaded, maintain_order))
|
1561
1555
|
end
|
1562
1556
|
|
1563
1557
|
# Take values by index.
|
@@ -1598,7 +1592,7 @@ module Polars
|
|
1598
1592
|
else
|
1599
1593
|
indices_lit = Utils.expr_to_lit_or_expr(indices, str_to_lit: false)
|
1600
1594
|
end
|
1601
|
-
|
1595
|
+
_from_rbexpr(_rbexpr.gather(indices_lit._rbexpr))
|
1602
1596
|
end
|
1603
1597
|
alias_method :take, :gather
|
1604
1598
|
|
@@ -1631,7 +1625,7 @@ module Polars
|
|
1631
1625
|
fill_value = Utils.parse_as_expression(fill_value, str_as_lit: true)
|
1632
1626
|
end
|
1633
1627
|
n = Utils.parse_as_expression(n)
|
1634
|
-
|
1628
|
+
_from_rbexpr(_rbexpr.shift(n, fill_value))
|
1635
1629
|
end
|
1636
1630
|
|
1637
1631
|
# Shift the values by a given period and fill the resulting null values.
|
@@ -1734,9 +1728,9 @@ module Polars
|
|
1734
1728
|
|
1735
1729
|
if !value.nil?
|
1736
1730
|
value = Utils.expr_to_lit_or_expr(value, str_to_lit: true)
|
1737
|
-
|
1731
|
+
_from_rbexpr(_rbexpr.fill_null(value._rbexpr))
|
1738
1732
|
else
|
1739
|
-
|
1733
|
+
_from_rbexpr(_rbexpr.fill_null_with_strategy(strategy, limit))
|
1740
1734
|
end
|
1741
1735
|
end
|
1742
1736
|
|
@@ -1765,7 +1759,7 @@ module Polars
|
|
1765
1759
|
# # └──────┴──────┘
|
1766
1760
|
def fill_nan(fill_value)
|
1767
1761
|
fill_value = Utils.expr_to_lit_or_expr(fill_value, str_to_lit: true)
|
1768
|
-
|
1762
|
+
_from_rbexpr(_rbexpr.fill_nan(fill_value._rbexpr))
|
1769
1763
|
end
|
1770
1764
|
|
1771
1765
|
# Fill missing values with the latest seen values.
|
@@ -1795,7 +1789,7 @@ module Polars
|
|
1795
1789
|
# # │ 2 ┆ 6 │
|
1796
1790
|
# # └─────┴─────┘
|
1797
1791
|
def forward_fill(limit: nil)
|
1798
|
-
|
1792
|
+
_from_rbexpr(_rbexpr.forward_fill(limit))
|
1799
1793
|
end
|
1800
1794
|
|
1801
1795
|
# Fill missing values with the next to be seen values.
|
@@ -1825,14 +1819,14 @@ module Polars
|
|
1825
1819
|
# # │ null ┆ 6 │
|
1826
1820
|
# # └──────┴─────┘
|
1827
1821
|
def backward_fill(limit: nil)
|
1828
|
-
|
1822
|
+
_from_rbexpr(_rbexpr.backward_fill(limit))
|
1829
1823
|
end
|
1830
1824
|
|
1831
1825
|
# Reverse the selection.
|
1832
1826
|
#
|
1833
1827
|
# @return [Expr]
|
1834
1828
|
def reverse
|
1835
|
-
|
1829
|
+
_from_rbexpr(_rbexpr.reverse)
|
1836
1830
|
end
|
1837
1831
|
|
1838
1832
|
# Get standard deviation.
|
@@ -1855,7 +1849,7 @@ module Polars
|
|
1855
1849
|
# # │ 1.0 │
|
1856
1850
|
# # └─────┘
|
1857
1851
|
def std(ddof: 1)
|
1858
|
-
|
1852
|
+
_from_rbexpr(_rbexpr.std(ddof))
|
1859
1853
|
end
|
1860
1854
|
|
1861
1855
|
# Get variance.
|
@@ -1878,7 +1872,7 @@ module Polars
|
|
1878
1872
|
# # │ 1.0 │
|
1879
1873
|
# # └─────┘
|
1880
1874
|
def var(ddof: 1)
|
1881
|
-
|
1875
|
+
_from_rbexpr(_rbexpr.var(ddof))
|
1882
1876
|
end
|
1883
1877
|
|
1884
1878
|
# Get maximum value.
|
@@ -1898,7 +1892,7 @@ module Polars
|
|
1898
1892
|
# # │ 1.0 │
|
1899
1893
|
# # └─────┘
|
1900
1894
|
def max
|
1901
|
-
|
1895
|
+
_from_rbexpr(_rbexpr.max)
|
1902
1896
|
end
|
1903
1897
|
|
1904
1898
|
# Get minimum value.
|
@@ -1918,7 +1912,7 @@ module Polars
|
|
1918
1912
|
# # │ -1.0 │
|
1919
1913
|
# # └──────┘
|
1920
1914
|
def min
|
1921
|
-
|
1915
|
+
_from_rbexpr(_rbexpr.min)
|
1922
1916
|
end
|
1923
1917
|
|
1924
1918
|
# Get maximum value, but propagate/poison encountered NaN values.
|
@@ -1938,7 +1932,7 @@ module Polars
|
|
1938
1932
|
# # │ NaN │
|
1939
1933
|
# # └─────┘
|
1940
1934
|
def nan_max
|
1941
|
-
|
1935
|
+
_from_rbexpr(_rbexpr.nan_max)
|
1942
1936
|
end
|
1943
1937
|
|
1944
1938
|
# Get minimum value, but propagate/poison encountered NaN values.
|
@@ -1958,7 +1952,7 @@ module Polars
|
|
1958
1952
|
# # │ NaN │
|
1959
1953
|
# # └─────┘
|
1960
1954
|
def nan_min
|
1961
|
-
|
1955
|
+
_from_rbexpr(_rbexpr.nan_min)
|
1962
1956
|
end
|
1963
1957
|
|
1964
1958
|
# Get sum value.
|
@@ -1982,7 +1976,7 @@ module Polars
|
|
1982
1976
|
# # │ 0 │
|
1983
1977
|
# # └─────┘
|
1984
1978
|
def sum
|
1985
|
-
|
1979
|
+
_from_rbexpr(_rbexpr.sum)
|
1986
1980
|
end
|
1987
1981
|
|
1988
1982
|
# Get mean value.
|
@@ -2002,7 +1996,7 @@ module Polars
|
|
2002
1996
|
# # │ 0.0 │
|
2003
1997
|
# # └─────┘
|
2004
1998
|
def mean
|
2005
|
-
|
1999
|
+
_from_rbexpr(_rbexpr.mean)
|
2006
2000
|
end
|
2007
2001
|
|
2008
2002
|
# Get median value using linear interpolation.
|
@@ -2022,7 +2016,7 @@ module Polars
|
|
2022
2016
|
# # │ 0.0 │
|
2023
2017
|
# # └─────┘
|
2024
2018
|
def median
|
2025
|
-
|
2019
|
+
_from_rbexpr(_rbexpr.median)
|
2026
2020
|
end
|
2027
2021
|
|
2028
2022
|
# Compute the product of an expression.
|
@@ -2042,7 +2036,7 @@ module Polars
|
|
2042
2036
|
# # │ 6 │
|
2043
2037
|
# # └─────┘
|
2044
2038
|
def product
|
2045
|
-
|
2039
|
+
_from_rbexpr(_rbexpr.product)
|
2046
2040
|
end
|
2047
2041
|
|
2048
2042
|
# Count unique values.
|
@@ -2062,7 +2056,7 @@ module Polars
|
|
2062
2056
|
# # │ 2 │
|
2063
2057
|
# # └─────┘
|
2064
2058
|
def n_unique
|
2065
|
-
|
2059
|
+
_from_rbexpr(_rbexpr.n_unique)
|
2066
2060
|
end
|
2067
2061
|
|
2068
2062
|
# Approx count unique values.
|
@@ -2073,7 +2067,7 @@ module Polars
|
|
2073
2067
|
#
|
2074
2068
|
# @example
|
2075
2069
|
# df = Polars::DataFrame.new({"a" => [1, 1, 2]})
|
2076
|
-
# df.select(Polars.col("a").
|
2070
|
+
# df.select(Polars.col("a").approx_n_unique)
|
2077
2071
|
# # =>
|
2078
2072
|
# # shape: (1, 1)
|
2079
2073
|
# # ┌─────┐
|
@@ -2083,9 +2077,10 @@ module Polars
|
|
2083
2077
|
# # ╞═════╡
|
2084
2078
|
# # │ 2 │
|
2085
2079
|
# # └─────┘
|
2086
|
-
def
|
2087
|
-
|
2080
|
+
def approx_n_unique
|
2081
|
+
_from_rbexpr(_rbexpr.approx_n_unique)
|
2088
2082
|
end
|
2083
|
+
alias_method :approx_unique, :approx_n_unique
|
2089
2084
|
|
2090
2085
|
# Count null values.
|
2091
2086
|
#
|
@@ -2109,7 +2104,7 @@ module Polars
|
|
2109
2104
|
# # │ 2 ┆ 0 │
|
2110
2105
|
# # └─────┴─────┘
|
2111
2106
|
def null_count
|
2112
|
-
|
2107
|
+
_from_rbexpr(_rbexpr.null_count)
|
2113
2108
|
end
|
2114
2109
|
|
2115
2110
|
# Get index of first unique value.
|
@@ -2149,7 +2144,7 @@ module Polars
|
|
2149
2144
|
# # │ 1 │
|
2150
2145
|
# # └─────┘
|
2151
2146
|
def arg_unique
|
2152
|
-
|
2147
|
+
_from_rbexpr(_rbexpr.arg_unique)
|
2153
2148
|
end
|
2154
2149
|
|
2155
2150
|
# Get unique values of this expression.
|
@@ -2174,9 +2169,9 @@ module Polars
|
|
2174
2169
|
# # └─────┘
|
2175
2170
|
def unique(maintain_order: false)
|
2176
2171
|
if maintain_order
|
2177
|
-
|
2172
|
+
_from_rbexpr(_rbexpr.unique_stable)
|
2178
2173
|
else
|
2179
|
-
|
2174
|
+
_from_rbexpr(_rbexpr.unique)
|
2180
2175
|
end
|
2181
2176
|
end
|
2182
2177
|
|
@@ -2197,7 +2192,7 @@ module Polars
|
|
2197
2192
|
# # │ 1 │
|
2198
2193
|
# # └─────┘
|
2199
2194
|
def first
|
2200
|
-
|
2195
|
+
_from_rbexpr(_rbexpr.first)
|
2201
2196
|
end
|
2202
2197
|
|
2203
2198
|
# Get the last value.
|
@@ -2217,7 +2212,7 @@ module Polars
|
|
2217
2212
|
# # │ 2 │
|
2218
2213
|
# # └─────┘
|
2219
2214
|
def last
|
2220
|
-
|
2215
|
+
_from_rbexpr(_rbexpr.last)
|
2221
2216
|
end
|
2222
2217
|
|
2223
2218
|
# Apply window function over a subgroup.
|
@@ -2281,7 +2276,7 @@ module Polars
|
|
2281
2276
|
# # └────────┘
|
2282
2277
|
def over(expr)
|
2283
2278
|
rbexprs = Utils.selection_to_rbexpr_list(expr)
|
2284
|
-
|
2279
|
+
_from_rbexpr(_rbexpr.over(rbexprs))
|
2285
2280
|
end
|
2286
2281
|
|
2287
2282
|
# Get mask of unique values.
|
@@ -2303,7 +2298,7 @@ module Polars
|
|
2303
2298
|
# # │ true │
|
2304
2299
|
# # └───────┘
|
2305
2300
|
def is_unique
|
2306
|
-
|
2301
|
+
_from_rbexpr(_rbexpr.is_unique)
|
2307
2302
|
end
|
2308
2303
|
|
2309
2304
|
# Get a mask of the first unique value.
|
@@ -2331,7 +2326,7 @@ module Polars
|
|
2331
2326
|
# # │ 5 ┆ true │
|
2332
2327
|
# # └─────┴──────────┘
|
2333
2328
|
def is_first_distinct
|
2334
|
-
|
2329
|
+
_from_rbexpr(_rbexpr.is_first_distinct)
|
2335
2330
|
end
|
2336
2331
|
alias_method :is_first, :is_first_distinct
|
2337
2332
|
|
@@ -2354,7 +2349,7 @@ module Polars
|
|
2354
2349
|
# # │ false │
|
2355
2350
|
# # └───────┘
|
2356
2351
|
def is_duplicated
|
2357
|
-
|
2352
|
+
_from_rbexpr(_rbexpr.is_duplicated)
|
2358
2353
|
end
|
2359
2354
|
|
2360
2355
|
# Get a boolean mask of the local maximum peaks.
|
@@ -2378,7 +2373,7 @@ module Polars
|
|
2378
2373
|
# # │ true │
|
2379
2374
|
# # └───────┘
|
2380
2375
|
def peak_max
|
2381
|
-
|
2376
|
+
_from_rbexpr(_rbexpr.peak_max)
|
2382
2377
|
end
|
2383
2378
|
|
2384
2379
|
# Get a boolean mask of the local minimum peaks.
|
@@ -2402,7 +2397,7 @@ module Polars
|
|
2402
2397
|
# # │ false │
|
2403
2398
|
# # └───────┘
|
2404
2399
|
def peak_min
|
2405
|
-
|
2400
|
+
_from_rbexpr(_rbexpr.peak_min)
|
2406
2401
|
end
|
2407
2402
|
|
2408
2403
|
# Get quantile value.
|
@@ -2476,7 +2471,7 @@ module Polars
|
|
2476
2471
|
# # └─────┘
|
2477
2472
|
def quantile(quantile, interpolation: "nearest")
|
2478
2473
|
quantile = Utils.expr_to_lit_or_expr(quantile, str_to_lit: false)
|
2479
|
-
|
2474
|
+
_from_rbexpr(_rbexpr.quantile(quantile._rbexpr, interpolation))
|
2480
2475
|
end
|
2481
2476
|
|
2482
2477
|
# Bin continuous values into discrete categories.
|
@@ -2532,7 +2527,7 @@ module Polars
|
|
2532
2527
|
# # │ 2 ┆ inf ┆ (1, inf] │
|
2533
2528
|
# # └─────┴──────┴────────────┘
|
2534
2529
|
def cut(breaks, labels: nil, left_closed: false, include_breaks: false)
|
2535
|
-
|
2530
|
+
_from_rbexpr(_rbexpr.cut(breaks, labels, left_closed, include_breaks))
|
2536
2531
|
end
|
2537
2532
|
|
2538
2533
|
# Bin continuous values into discrete categories based on their quantiles.
|
@@ -2623,7 +2618,7 @@ module Polars
|
|
2623
2618
|
)
|
2624
2619
|
end
|
2625
2620
|
|
2626
|
-
|
2621
|
+
_from_rbexpr(rbexpr)
|
2627
2622
|
end
|
2628
2623
|
|
2629
2624
|
# Get the lengths of runs of identical values.
|
@@ -2648,7 +2643,7 @@ module Polars
|
|
2648
2643
|
# # │ 2 ┆ 3 │
|
2649
2644
|
# # └─────────┴────────┘
|
2650
2645
|
def rle
|
2651
|
-
|
2646
|
+
_from_rbexpr(_rbexpr.rle)
|
2652
2647
|
end
|
2653
2648
|
|
2654
2649
|
# Map values to run IDs.
|
@@ -2676,7 +2671,7 @@ module Polars
|
|
2676
2671
|
# # │ 1 ┆ y ┆ 2 ┆ 3 │
|
2677
2672
|
# # └─────┴──────┴─────┴──────┘
|
2678
2673
|
def rle_id
|
2679
|
-
|
2674
|
+
_from_rbexpr(_rbexpr.rle_id)
|
2680
2675
|
end
|
2681
2676
|
|
2682
2677
|
# Filter a single column.
|
@@ -2715,7 +2710,7 @@ module Polars
|
|
2715
2710
|
# # │ g2 ┆ 0 ┆ 3 │
|
2716
2711
|
# # └───────────┴─────┴─────┘
|
2717
2712
|
def filter(predicate)
|
2718
|
-
|
2713
|
+
_from_rbexpr(_rbexpr.filter(predicate._rbexpr))
|
2719
2714
|
end
|
2720
2715
|
|
2721
2716
|
# Filter a single column.
|
@@ -2793,7 +2788,7 @@ module Polars
|
|
2793
2788
|
# if !return_dtype.nil?
|
2794
2789
|
# return_dtype = Utils.rb_type_to_dtype(return_dtype)
|
2795
2790
|
# end
|
2796
|
-
#
|
2791
|
+
# _from_rbexpr(_rbexpr.map(f, return_dtype, agg_list))
|
2797
2792
|
# end
|
2798
2793
|
|
2799
2794
|
# Apply a custom/user-defined function (UDF) in a GroupBy or Projection context.
|
@@ -2904,7 +2899,7 @@ module Polars
|
|
2904
2899
|
# # │ b ┆ [2, 3, 4] │
|
2905
2900
|
# # └───────┴───────────┘
|
2906
2901
|
def flatten
|
2907
|
-
|
2902
|
+
_from_rbexpr(_rbexpr.explode)
|
2908
2903
|
end
|
2909
2904
|
|
2910
2905
|
# Explode a list or utf8 Series.
|
@@ -2931,7 +2926,7 @@ module Polars
|
|
2931
2926
|
# # │ 6 │
|
2932
2927
|
# # └─────┘
|
2933
2928
|
def explode
|
2934
|
-
|
2929
|
+
_from_rbexpr(_rbexpr.explode)
|
2935
2930
|
end
|
2936
2931
|
|
2937
2932
|
# Take every nth value in the Series and return as a new Series.
|
@@ -2953,7 +2948,7 @@ module Polars
|
|
2953
2948
|
# # │ 7 │
|
2954
2949
|
# # └─────┘
|
2955
2950
|
def gather_every(n, offset = 0)
|
2956
|
-
|
2951
|
+
_from_rbexpr(_rbexpr.gather_every(n, offset))
|
2957
2952
|
end
|
2958
2953
|
alias_method :take_every, :gather_every
|
2959
2954
|
|
@@ -2979,7 +2974,7 @@ module Polars
|
|
2979
2974
|
# # │ 3 │
|
2980
2975
|
# # └─────┘
|
2981
2976
|
def head(n = 10)
|
2982
|
-
|
2977
|
+
_from_rbexpr(_rbexpr.head(n))
|
2983
2978
|
end
|
2984
2979
|
|
2985
2980
|
# Get the last `n` rows.
|
@@ -3004,7 +2999,7 @@ module Polars
|
|
3004
2999
|
# # │ 7 │
|
3005
3000
|
# # └─────┘
|
3006
3001
|
def tail(n = 10)
|
3007
|
-
|
3002
|
+
_from_rbexpr(_rbexpr.tail(n))
|
3008
3003
|
end
|
3009
3004
|
|
3010
3005
|
# Get the first `n` rows.
|
@@ -3019,28 +3014,552 @@ module Polars
|
|
3019
3014
|
head(n)
|
3020
3015
|
end
|
3021
3016
|
|
3022
|
-
#
|
3017
|
+
# Method equivalent of equality operator `expr == other`.
|
3018
|
+
#
|
3019
|
+
# @param other [Object]
|
3020
|
+
# A literal or expression value to compare with.
|
3021
|
+
#
|
3022
|
+
# @return [Expr]
|
3023
|
+
# @example
|
3024
|
+
# df = Polars::DataFrame.new(
|
3025
|
+
# {
|
3026
|
+
# "x" => [1.0, 2.0, Float::NAN, 4.0],
|
3027
|
+
# "y" => [2.0, 2.0, Float::NAN, 4.0]
|
3028
|
+
# }
|
3029
|
+
# )
|
3030
|
+
# df.with_columns(
|
3031
|
+
# Polars.col("x").eq(Polars.col("y")).alias("x == y")
|
3032
|
+
# )
|
3033
|
+
# # =>
|
3034
|
+
# # shape: (4, 3)
|
3035
|
+
# # ┌─────┬─────┬────────┐
|
3036
|
+
# # │ x ┆ y ┆ x == y │
|
3037
|
+
# # │ --- ┆ --- ┆ --- │
|
3038
|
+
# # │ f64 ┆ f64 ┆ bool │
|
3039
|
+
# # ╞═════╪═════╪════════╡
|
3040
|
+
# # │ 1.0 ┆ 2.0 ┆ false │
|
3041
|
+
# # │ 2.0 ┆ 2.0 ┆ true │
|
3042
|
+
# # │ NaN ┆ NaN ┆ true │
|
3043
|
+
# # │ 4.0 ┆ 4.0 ┆ true │
|
3044
|
+
# # └─────┴─────┴────────┘
|
3045
|
+
def eq(other)
|
3046
|
+
self == other
|
3047
|
+
end
|
3048
|
+
|
3049
|
+
# Method equivalent of equality operator `expr == other` where `None == None`.
|
3050
|
+
#
|
3051
|
+
# This differs from default `eq` where null values are propagated.
|
3052
|
+
#
|
3053
|
+
# @param other [Object]
|
3054
|
+
# A literal or expression value to compare with.
|
3023
3055
|
#
|
3024
3056
|
# @return [Expr]
|
3025
3057
|
#
|
3026
3058
|
# @example
|
3027
|
-
# df = Polars::DataFrame.new(
|
3028
|
-
#
|
3059
|
+
# df = Polars::DataFrame.new(
|
3060
|
+
# data={
|
3061
|
+
# "x" => [1.0, 2.0, Float::NAN, 4.0, nil, nil],
|
3062
|
+
# "y" => [2.0, 2.0, Float::NAN, 4.0, 5.0, nil]
|
3063
|
+
# }
|
3064
|
+
# )
|
3065
|
+
# df.with_columns(
|
3066
|
+
# Polars.col("x").eq(Polars.col("y")).alias("x eq y"),
|
3067
|
+
# Polars.col("x").eq_missing(Polars.col("y")).alias("x eq_missing y")
|
3068
|
+
# )
|
3069
|
+
# # =>
|
3070
|
+
# # shape: (6, 4)
|
3071
|
+
# # ┌──────┬──────┬────────┬────────────────┐
|
3072
|
+
# # │ x ┆ y ┆ x eq y ┆ x eq_missing y │
|
3073
|
+
# # │ --- ┆ --- ┆ --- ┆ --- │
|
3074
|
+
# # │ f64 ┆ f64 ┆ bool ┆ bool │
|
3075
|
+
# # ╞══════╪══════╪════════╪════════════════╡
|
3076
|
+
# # │ 1.0 ┆ 2.0 ┆ false ┆ false │
|
3077
|
+
# # │ 2.0 ┆ 2.0 ┆ true ┆ true │
|
3078
|
+
# # │ NaN ┆ NaN ┆ true ┆ true │
|
3079
|
+
# # │ 4.0 ┆ 4.0 ┆ true ┆ true │
|
3080
|
+
# # │ null ┆ 5.0 ┆ null ┆ false │
|
3081
|
+
# # │ null ┆ null ┆ null ┆ true │
|
3082
|
+
# # └──────┴──────┴────────┴────────────────┘
|
3083
|
+
def eq_missing(other)
|
3084
|
+
other = Utils.parse_as_expression(other, str_as_lit: true)
|
3085
|
+
_from_rbexpr(_rbexpr.eq_missing(other))
|
3086
|
+
end
|
3087
|
+
|
3088
|
+
# Method equivalent of "greater than or equal" operator `expr >= other`.
|
3089
|
+
#
|
3090
|
+
# @param other [Object]
|
3091
|
+
# A literal or expression value to compare with.
|
3092
|
+
#
|
3093
|
+
# @return [Expr]
|
3094
|
+
#
|
3095
|
+
# @example
|
3096
|
+
# df = Polars::DataFrame.new(
|
3097
|
+
# {
|
3098
|
+
# "x" => [5.0, 4.0, Float::NAN, 2.0],
|
3099
|
+
# "y" => [5.0, 3.0, Float::NAN, 1.0]
|
3100
|
+
# }
|
3101
|
+
# )
|
3102
|
+
# df.with_columns(
|
3103
|
+
# Polars.col("x").ge(Polars.col("y")).alias("x >= y")
|
3104
|
+
# )
|
3105
|
+
# # =>
|
3106
|
+
# # shape: (4, 3)
|
3107
|
+
# # ┌─────┬─────┬────────┐
|
3108
|
+
# # │ x ┆ y ┆ x >= y │
|
3109
|
+
# # │ --- ┆ --- ┆ --- │
|
3110
|
+
# # │ f64 ┆ f64 ┆ bool │
|
3111
|
+
# # ╞═════╪═════╪════════╡
|
3112
|
+
# # │ 5.0 ┆ 5.0 ┆ true │
|
3113
|
+
# # │ 4.0 ┆ 3.0 ┆ true │
|
3114
|
+
# # │ NaN ┆ NaN ┆ true │
|
3115
|
+
# # │ 2.0 ┆ 1.0 ┆ true │
|
3116
|
+
# # └─────┴─────┴────────┘
|
3117
|
+
def ge(other)
|
3118
|
+
self >= other
|
3119
|
+
end
|
3120
|
+
|
3121
|
+
# Method equivalent of "greater than" operator `expr > other`.
|
3122
|
+
#
|
3123
|
+
# @param other [Object]
|
3124
|
+
# A literal or expression value to compare with.
|
3125
|
+
#
|
3126
|
+
# @return [Expr]
|
3127
|
+
#
|
3128
|
+
# @example
|
3129
|
+
# df = Polars::DataFrame.new(
|
3130
|
+
# {
|
3131
|
+
# "x" => [5.0, 4.0, Float::NAN, 2.0],
|
3132
|
+
# "y" => [5.0, 3.0, Float::NAN, 1.0]
|
3133
|
+
# }
|
3134
|
+
# )
|
3135
|
+
# df.with_columns(
|
3136
|
+
# Polars.col("x").gt(Polars.col("y")).alias("x > y")
|
3137
|
+
# )
|
3138
|
+
# # =>
|
3139
|
+
# # shape: (4, 3)
|
3140
|
+
# # ┌─────┬─────┬───────┐
|
3141
|
+
# # │ x ┆ y ┆ x > y │
|
3142
|
+
# # │ --- ┆ --- ┆ --- │
|
3143
|
+
# # │ f64 ┆ f64 ┆ bool │
|
3144
|
+
# # ╞═════╪═════╪═══════╡
|
3145
|
+
# # │ 5.0 ┆ 5.0 ┆ false │
|
3146
|
+
# # │ 4.0 ┆ 3.0 ┆ true │
|
3147
|
+
# # │ NaN ┆ NaN ┆ false │
|
3148
|
+
# # │ 2.0 ┆ 1.0 ┆ true │
|
3149
|
+
# # └─────┴─────┴───────┘
|
3150
|
+
def gt(other)
|
3151
|
+
self > other
|
3152
|
+
end
|
3153
|
+
|
3154
|
+
# Method equivalent of "less than or equal" operator `expr <= other`.
|
3155
|
+
#
|
3156
|
+
# @param other [Object]
|
3157
|
+
# A literal or expression value to compare with.
|
3158
|
+
#
|
3159
|
+
# @return [Expr]
|
3160
|
+
#
|
3161
|
+
# @example
|
3162
|
+
# df = Polars::DataFrame.new(
|
3163
|
+
# {
|
3164
|
+
# "x" => [5.0, 4.0, Float::NAN, 0.5],
|
3165
|
+
# "y" => [5.0, 3.5, Float::NAN, 2.0]
|
3166
|
+
# }
|
3167
|
+
# )
|
3168
|
+
# df.with_columns(
|
3169
|
+
# Polars.col("x").le(Polars.col("y")).alias("x <= y")
|
3170
|
+
# )
|
3171
|
+
# # =>
|
3172
|
+
# # shape: (4, 3)
|
3173
|
+
# # ┌─────┬─────┬────────┐
|
3174
|
+
# # │ x ┆ y ┆ x <= y │
|
3175
|
+
# # │ --- ┆ --- ┆ --- │
|
3176
|
+
# # │ f64 ┆ f64 ┆ bool │
|
3177
|
+
# # ╞═════╪═════╪════════╡
|
3178
|
+
# # │ 5.0 ┆ 5.0 ┆ true │
|
3179
|
+
# # │ 4.0 ┆ 3.5 ┆ false │
|
3180
|
+
# # │ NaN ┆ NaN ┆ true │
|
3181
|
+
# # │ 0.5 ┆ 2.0 ┆ true │
|
3182
|
+
# # └─────┴─────┴────────┘
|
3183
|
+
def le(other)
|
3184
|
+
self <= other
|
3185
|
+
end
|
3186
|
+
|
3187
|
+
# Method equivalent of "less than" operator `expr < other`.
|
3188
|
+
#
|
3189
|
+
# @param other [Object]
|
3190
|
+
# A literal or expression value to compare with.
|
3191
|
+
#
|
3192
|
+
# @return [Expr]
|
3193
|
+
#
|
3194
|
+
# @example
|
3195
|
+
# df = Polars::DataFrame.new(
|
3196
|
+
# {
|
3197
|
+
# "x" => [1.0, 2.0, Float::NAN, 3.0],
|
3198
|
+
# "y" => [2.0, 2.0, Float::NAN, 4.0]
|
3199
|
+
# }
|
3200
|
+
# )
|
3201
|
+
# df.with_columns(
|
3202
|
+
# Polars.col("x").lt(Polars.col("y")).alias("x < y"),
|
3203
|
+
# )
|
3204
|
+
# # =>
|
3205
|
+
# # shape: (4, 3)
|
3206
|
+
# # ┌─────┬─────┬───────┐
|
3207
|
+
# # │ x ┆ y ┆ x < y │
|
3208
|
+
# # │ --- ┆ --- ┆ --- │
|
3209
|
+
# # │ f64 ┆ f64 ┆ bool │
|
3210
|
+
# # ╞═════╪═════╪═══════╡
|
3211
|
+
# # │ 1.0 ┆ 2.0 ┆ true │
|
3212
|
+
# # │ 2.0 ┆ 2.0 ┆ false │
|
3213
|
+
# # │ NaN ┆ NaN ┆ false │
|
3214
|
+
# # │ 3.0 ┆ 4.0 ┆ true │
|
3215
|
+
# # └─────┴─────┴───────┘
|
3216
|
+
def lt(other)
|
3217
|
+
self < other
|
3218
|
+
end
|
3219
|
+
|
3220
|
+
# Method equivalent of inequality operator `expr != other`.
|
3221
|
+
#
|
3222
|
+
# @param other [Object]
|
3223
|
+
# A literal or expression value to compare with.
|
3224
|
+
#
|
3225
|
+
# @return [Expr]
|
3226
|
+
#
|
3227
|
+
# @example
|
3228
|
+
# df = Polars::DataFrame.new(
|
3229
|
+
# {
|
3230
|
+
# "x" => [1.0, 2.0, Float::NAN, 4.0],
|
3231
|
+
# "y" => [2.0, 2.0, Float::NAN, 4.0]
|
3232
|
+
# }
|
3233
|
+
# )
|
3234
|
+
# df.with_columns(
|
3235
|
+
# Polars.col("x").ne(Polars.col("y")).alias("x != y"),
|
3236
|
+
# )
|
3237
|
+
# # =>
|
3238
|
+
# # shape: (4, 3)
|
3239
|
+
# # ┌─────┬─────┬────────┐
|
3240
|
+
# # │ x ┆ y ┆ x != y │
|
3241
|
+
# # │ --- ┆ --- ┆ --- │
|
3242
|
+
# # │ f64 ┆ f64 ┆ bool │
|
3243
|
+
# # ╞═════╪═════╪════════╡
|
3244
|
+
# # │ 1.0 ┆ 2.0 ┆ true │
|
3245
|
+
# # │ 2.0 ┆ 2.0 ┆ false │
|
3246
|
+
# # │ NaN ┆ NaN ┆ false │
|
3247
|
+
# # │ 4.0 ┆ 4.0 ┆ false │
|
3248
|
+
# # └─────┴─────┴────────┘
|
3249
|
+
def ne(other)
|
3250
|
+
self != other
|
3251
|
+
end
|
3252
|
+
|
3253
|
+
# Method equivalent of equality operator `expr != other` where `None == None`.
|
3254
|
+
#
|
3255
|
+
# This differs from default `ne` where null values are propagated.
|
3256
|
+
#
|
3257
|
+
# @param other [Object]
|
3258
|
+
# A literal or expression value to compare with.
|
3259
|
+
#
|
3260
|
+
# @return [Expr]
|
3261
|
+
#
|
3262
|
+
# @example
|
3263
|
+
# df = Polars::DataFrame.new(
|
3264
|
+
# {
|
3265
|
+
# "x" => [1.0, 2.0, Float::NAN, 4.0, nil, nil],
|
3266
|
+
# "y" => [2.0, 2.0, Float::NAN, 4.0, 5.0, nil]
|
3267
|
+
# }
|
3268
|
+
# )
|
3269
|
+
# df.with_columns(
|
3270
|
+
# Polars.col("x").ne(Polars.col("y")).alias("x ne y"),
|
3271
|
+
# Polars.col("x").ne_missing(Polars.col("y")).alias("x ne_missing y")
|
3272
|
+
# )
|
3273
|
+
# # =>
|
3274
|
+
# # shape: (6, 4)
|
3275
|
+
# # ┌──────┬──────┬────────┬────────────────┐
|
3276
|
+
# # │ x ┆ y ┆ x ne y ┆ x ne_missing y │
|
3277
|
+
# # │ --- ┆ --- ┆ --- ┆ --- │
|
3278
|
+
# # │ f64 ┆ f64 ┆ bool ┆ bool │
|
3279
|
+
# # ╞══════╪══════╪════════╪════════════════╡
|
3280
|
+
# # │ 1.0 ┆ 2.0 ┆ true ┆ true │
|
3281
|
+
# # │ 2.0 ┆ 2.0 ┆ false ┆ false │
|
3282
|
+
# # │ NaN ┆ NaN ┆ false ┆ false │
|
3283
|
+
# # │ 4.0 ┆ 4.0 ┆ false ┆ false │
|
3284
|
+
# # │ null ┆ 5.0 ┆ null ┆ true │
|
3285
|
+
# # │ null ┆ null ┆ null ┆ false │
|
3286
|
+
# # └──────┴──────┴────────┴────────────────┘
|
3287
|
+
def ne_missing(other)
|
3288
|
+
other = Utils.parse_as_expression(other, str_as_lit: true)
|
3289
|
+
_from_rbexpr(_rbexpr.neq_missing(other))
|
3290
|
+
end
|
3291
|
+
|
3292
|
+
# Method equivalent of addition operator `expr + other`.
|
3293
|
+
#
|
3294
|
+
# @param other [Object]
|
3295
|
+
# numeric or string value; accepts expression input.
|
3296
|
+
#
|
3297
|
+
# @return [Expr]
|
3298
|
+
#
|
3299
|
+
# @example
|
3300
|
+
# df = Polars::DataFrame.new({"x" => [1, 2, 3, 4, 5]})
|
3301
|
+
# df.with_columns(
|
3302
|
+
# Polars.col("x").add(2).alias("x+int"),
|
3303
|
+
# Polars.col("x").add(Polars.col("x").cum_prod).alias("x+expr")
|
3304
|
+
# )
|
3305
|
+
# # =>
|
3306
|
+
# # shape: (5, 3)
|
3307
|
+
# # ┌─────┬───────┬────────┐
|
3308
|
+
# # │ x ┆ x+int ┆ x+expr │
|
3309
|
+
# # │ --- ┆ --- ┆ --- │
|
3310
|
+
# # │ i64 ┆ i64 ┆ i64 │
|
3311
|
+
# # ╞═════╪═══════╪════════╡
|
3312
|
+
# # │ 1 ┆ 3 ┆ 2 │
|
3313
|
+
# # │ 2 ┆ 4 ┆ 4 │
|
3314
|
+
# # │ 3 ┆ 5 ┆ 9 │
|
3315
|
+
# # │ 4 ┆ 6 ┆ 28 │
|
3316
|
+
# # │ 5 ┆ 7 ┆ 125 │
|
3317
|
+
# # └─────┴───────┴────────┘
|
3318
|
+
#
|
3319
|
+
# @example
|
3320
|
+
# df = Polars::DataFrame.new(
|
3321
|
+
# {"x" => ["a", "d", "g"], "y": ["b", "e", "h"], "z": ["c", "f", "i"]}
|
3322
|
+
# )
|
3323
|
+
# df.with_columns(Polars.col("x").add(Polars.col("y")).add(Polars.col("z")).alias("xyz"))
|
3324
|
+
# # =>
|
3325
|
+
# # shape: (3, 4)
|
3326
|
+
# # ┌─────┬─────┬─────┬─────┐
|
3327
|
+
# # │ x ┆ y ┆ z ┆ xyz │
|
3328
|
+
# # │ --- ┆ --- ┆ --- ┆ --- │
|
3329
|
+
# # │ str ┆ str ┆ str ┆ str │
|
3330
|
+
# # ╞═════╪═════╪═════╪═════╡
|
3331
|
+
# # │ a ┆ b ┆ c ┆ abc │
|
3332
|
+
# # │ d ┆ e ┆ f ┆ def │
|
3333
|
+
# # │ g ┆ h ┆ i ┆ ghi │
|
3334
|
+
# # └─────┴─────┴─────┴─────┘
|
3335
|
+
def add(other)
|
3336
|
+
self + other
|
3337
|
+
end
|
3338
|
+
|
3339
|
+
# Method equivalent of integer division operator `expr // other`.
|
3340
|
+
#
|
3341
|
+
# @param other [Object]
|
3342
|
+
# Numeric literal or expression value.
|
3343
|
+
#
|
3344
|
+
# @return [Expr]
|
3345
|
+
#
|
3346
|
+
# @example
|
3347
|
+
# df = Polars::DataFrame.new({"x" => [1, 2, 3, 4, 5]})
|
3348
|
+
# df.with_columns(
|
3349
|
+
# Polars.col("x").truediv(2).alias("x/2"),
|
3350
|
+
# Polars.col("x").floordiv(2).alias("x//2")
|
3351
|
+
# )
|
3352
|
+
# # =>
|
3353
|
+
# # shape: (5, 3)
|
3354
|
+
# # ┌─────┬─────┬──────┐
|
3355
|
+
# # │ x ┆ x/2 ┆ x//2 │
|
3356
|
+
# # │ --- ┆ --- ┆ --- │
|
3357
|
+
# # │ i64 ┆ f64 ┆ i64 │
|
3358
|
+
# # ╞═════╪═════╪══════╡
|
3359
|
+
# # │ 1 ┆ 0.5 ┆ 0 │
|
3360
|
+
# # │ 2 ┆ 1.0 ┆ 1 │
|
3361
|
+
# # │ 3 ┆ 1.5 ┆ 1 │
|
3362
|
+
# # │ 4 ┆ 2.0 ┆ 2 │
|
3363
|
+
# # │ 5 ┆ 2.5 ┆ 2 │
|
3364
|
+
# # └─────┴─────┴──────┘
|
3365
|
+
def floordiv(other)
|
3366
|
+
_from_rbexpr(_rbexpr.floordiv(_to_rbexpr(other)))
|
3367
|
+
end
|
3368
|
+
|
3369
|
+
# Method equivalent of modulus operator `expr % other`.
|
3370
|
+
#
|
3371
|
+
# @param other [Object]
|
3372
|
+
# Numeric literal or expression value.
|
3373
|
+
#
|
3374
|
+
# @return [Expr]
|
3375
|
+
#
|
3376
|
+
# @example
|
3377
|
+
# df = Polars::DataFrame.new({"x" => [0, 1, 2, 3, 4]})
|
3378
|
+
# df.with_columns(Polars.col("x").mod(2).alias("x%2"))
|
3379
|
+
# # =>
|
3380
|
+
# # shape: (5, 2)
|
3381
|
+
# # ┌─────┬─────┐
|
3382
|
+
# # │ x ┆ x%2 │
|
3383
|
+
# # │ --- ┆ --- │
|
3384
|
+
# # │ i64 ┆ i64 │
|
3385
|
+
# # ╞═════╪═════╡
|
3386
|
+
# # │ 0 ┆ 0 │
|
3387
|
+
# # │ 1 ┆ 1 │
|
3388
|
+
# # │ 2 ┆ 0 │
|
3389
|
+
# # │ 3 ┆ 1 │
|
3390
|
+
# # │ 4 ┆ 0 │
|
3391
|
+
# # └─────┴─────┘
|
3392
|
+
def mod(other)
|
3393
|
+
self % other
|
3394
|
+
end
|
3395
|
+
|
3396
|
+
# Method equivalent of multiplication operator `expr * other`.
|
3397
|
+
#
|
3398
|
+
# @param other [Object]
|
3399
|
+
# Numeric literal or expression value.
|
3400
|
+
#
|
3401
|
+
# @return [Expr]
|
3402
|
+
#
|
3403
|
+
# @example
|
3404
|
+
# df = Polars::DataFrame.new({"x" => [1, 2, 4, 8, 16]})
|
3405
|
+
# df.with_columns(
|
3406
|
+
# Polars.col("x").mul(2).alias("x*2"),
|
3407
|
+
# Polars.col("x").mul(Polars.col("x").log(2)).alias("x * xlog2"),
|
3408
|
+
# )
|
3409
|
+
# # =>
|
3410
|
+
# # shape: (5, 3)
|
3411
|
+
# # ┌─────┬─────┬───────────┐
|
3412
|
+
# # │ x ┆ x*2 ┆ x * xlog2 │
|
3413
|
+
# # │ --- ┆ --- ┆ --- │
|
3414
|
+
# # │ i64 ┆ i64 ┆ f64 │
|
3415
|
+
# # ╞═════╪═════╪═══════════╡
|
3416
|
+
# # │ 1 ┆ 2 ┆ 0.0 │
|
3417
|
+
# # │ 2 ┆ 4 ┆ 2.0 │
|
3418
|
+
# # │ 4 ┆ 8 ┆ 8.0 │
|
3419
|
+
# # │ 8 ┆ 16 ┆ 24.0 │
|
3420
|
+
# # │ 16 ┆ 32 ┆ 64.0 │
|
3421
|
+
# # └─────┴─────┴───────────┘
|
3422
|
+
def mul(other)
|
3423
|
+
self * other
|
3424
|
+
end
|
3425
|
+
|
3426
|
+
# Method equivalent of subtraction operator `expr - other`.
|
3427
|
+
#
|
3428
|
+
# @param other [Object]
|
3429
|
+
# Numeric literal or expression value.
|
3430
|
+
#
|
3431
|
+
# @return [Expr]
|
3432
|
+
#
|
3433
|
+
# @example
|
3434
|
+
# df = Polars::DataFrame.new({"x" => [0, 1, 2, 3, 4]})
|
3435
|
+
# df.with_columns(
|
3436
|
+
# Polars.col("x").sub(2).alias("x-2"),
|
3437
|
+
# Polars.col("x").sub(Polars.col("x").cum_sum).alias("x-expr"),
|
3438
|
+
# )
|
3439
|
+
# # =>
|
3440
|
+
# # shape: (5, 3)
|
3441
|
+
# # ┌─────┬─────┬────────┐
|
3442
|
+
# # │ x ┆ x-2 ┆ x-expr │
|
3443
|
+
# # │ --- ┆ --- ┆ --- │
|
3444
|
+
# # │ i64 ┆ i64 ┆ i64 │
|
3445
|
+
# # ╞═════╪═════╪════════╡
|
3446
|
+
# # │ 0 ┆ -2 ┆ 0 │
|
3447
|
+
# # │ 1 ┆ -1 ┆ 0 │
|
3448
|
+
# # │ 2 ┆ 0 ┆ -1 │
|
3449
|
+
# # │ 3 ┆ 1 ┆ -3 │
|
3450
|
+
# # │ 4 ┆ 2 ┆ -6 │
|
3451
|
+
# # └─────┴─────┴────────┘
|
3452
|
+
def sub(other)
|
3453
|
+
self - other
|
3454
|
+
end
|
3455
|
+
|
3456
|
+
# Method equivalent of unary minus operator `-expr`.
|
3457
|
+
#
|
3458
|
+
# @return [Expr]
|
3459
|
+
#
|
3460
|
+
# @example
|
3461
|
+
# df = Polars::DataFrame.new({"a" => [-1, 0, 2, nil]})
|
3462
|
+
# df.with_columns(Polars.col("a").neg)
|
3029
3463
|
# # =>
|
3030
3464
|
# # shape: (4, 1)
|
3031
3465
|
# # ┌──────┐
|
3032
|
-
# # │
|
3466
|
+
# # │ a │
|
3033
3467
|
# # │ --- │
|
3034
|
-
# # │
|
3468
|
+
# # │ i64 │
|
3035
3469
|
# # ╞══════╡
|
3036
|
-
# # │ 1
|
3037
|
-
# # │
|
3038
|
-
# # │
|
3039
|
-
# # │
|
3470
|
+
# # │ 1 │
|
3471
|
+
# # │ 0 │
|
3472
|
+
# # │ -2 │
|
3473
|
+
# # │ null │
|
3040
3474
|
# # └──────┘
|
3475
|
+
def neg
|
3476
|
+
-self
|
3477
|
+
end
|
3478
|
+
|
3479
|
+
# Method equivalent of float division operator `expr / other`.
|
3480
|
+
#
|
3481
|
+
# @param other [Object]
|
3482
|
+
# Numeric literal or expression value.
|
3483
|
+
#
|
3484
|
+
# @return [Expr]
|
3485
|
+
#
|
3486
|
+
# @example
|
3487
|
+
# df = Polars::DataFrame.new(
|
3488
|
+
# {"x" => [-2, -1, 0, 1, 2], "y" => [0.5, 0.0, 0.0, -4.0, -0.5]}
|
3489
|
+
# )
|
3490
|
+
# df.with_columns(
|
3491
|
+
# Polars.col("x").truediv(2).alias("x/2"),
|
3492
|
+
# Polars.col("x").truediv(Polars.col("y")).alias("x/y")
|
3493
|
+
# )
|
3494
|
+
# # =>
|
3495
|
+
# # shape: (5, 4)
|
3496
|
+
# # ┌─────┬──────┬──────┬───────┐
|
3497
|
+
# # │ x ┆ y ┆ x/2 ┆ x/y │
|
3498
|
+
# # │ --- ┆ --- ┆ --- ┆ --- │
|
3499
|
+
# # │ i64 ┆ f64 ┆ f64 ┆ f64 │
|
3500
|
+
# # ╞═════╪══════╪══════╪═══════╡
|
3501
|
+
# # │ -2 ┆ 0.5 ┆ -1.0 ┆ -4.0 │
|
3502
|
+
# # │ -1 ┆ 0.0 ┆ -0.5 ┆ -inf │
|
3503
|
+
# # │ 0 ┆ 0.0 ┆ 0.0 ┆ NaN │
|
3504
|
+
# # │ 1 ┆ -4.0 ┆ 0.5 ┆ -0.25 │
|
3505
|
+
# # │ 2 ┆ -0.5 ┆ 1.0 ┆ -4.0 │
|
3506
|
+
# # └─────┴──────┴──────┴───────┘
|
3507
|
+
def truediv(other)
|
3508
|
+
self / other
|
3509
|
+
end
|
3510
|
+
|
3511
|
+
# Raise expression to the power of exponent.
|
3512
|
+
#
|
3513
|
+
# @return [Expr]
|
3514
|
+
#
|
3515
|
+
# @example
|
3516
|
+
# df = Polars::DataFrame.new({"x" => [1, 2, 4, 8]})
|
3517
|
+
# df.with_columns(
|
3518
|
+
# Polars.col("x").pow(3).alias("cube"),
|
3519
|
+
# Polars.col("x").pow(Polars.col("x").log(2)).alias("x ** xlog2")
|
3520
|
+
# )
|
3521
|
+
# # =>
|
3522
|
+
# # shape: (4, 3)
|
3523
|
+
# # ┌─────┬──────┬────────────┐
|
3524
|
+
# # │ x ┆ cube ┆ x ** xlog2 │
|
3525
|
+
# # │ --- ┆ --- ┆ --- │
|
3526
|
+
# # │ i64 ┆ i64 ┆ f64 │
|
3527
|
+
# # ╞═════╪══════╪════════════╡
|
3528
|
+
# # │ 1 ┆ 1 ┆ 1.0 │
|
3529
|
+
# # │ 2 ┆ 8 ┆ 2.0 │
|
3530
|
+
# # │ 4 ┆ 64 ┆ 16.0 │
|
3531
|
+
# # │ 8 ┆ 512 ┆ 512.0 │
|
3532
|
+
# # └─────┴──────┴────────────┘
|
3041
3533
|
def pow(exponent)
|
3042
|
-
exponent
|
3043
|
-
|
3534
|
+
self**exponent
|
3535
|
+
end
|
3536
|
+
|
3537
|
+
# Method equivalent of bitwise exclusive-or operator `expr ^ other`.
|
3538
|
+
#
|
3539
|
+
# @param other [Object]
|
3540
|
+
# Integer or boolean value; accepts expression input.
|
3541
|
+
#
|
3542
|
+
# @return [Expr]
|
3543
|
+
#
|
3544
|
+
# @example
|
3545
|
+
# df = Polars::DataFrame.new(
|
3546
|
+
# {"x" => [true, false, true, false], "y" => [true, true, false, false]}
|
3547
|
+
# )
|
3548
|
+
# df.with_columns(Polars.col("x").xor(Polars.col("y")).alias("x ^ y"))
|
3549
|
+
# # =>
|
3550
|
+
# # shape: (4, 3)
|
3551
|
+
# # ┌───────┬───────┬───────┐
|
3552
|
+
# # │ x ┆ y ┆ x ^ y │
|
3553
|
+
# # │ --- ┆ --- ┆ --- │
|
3554
|
+
# # │ bool ┆ bool ┆ bool │
|
3555
|
+
# # ╞═══════╪═══════╪═══════╡
|
3556
|
+
# # │ true ┆ true ┆ false │
|
3557
|
+
# # │ false ┆ true ┆ true │
|
3558
|
+
# # │ true ┆ false ┆ true │
|
3559
|
+
# # │ false ┆ false ┆ false │
|
3560
|
+
# # └───────┴───────┴───────┘
|
3561
|
+
def xor(other)
|
3562
|
+
self ^ other
|
3044
3563
|
end
|
3045
3564
|
|
3046
3565
|
# Check if elements of this expression are present in the other Series.
|
@@ -3076,7 +3595,7 @@ module Polars
|
|
3076
3595
|
else
|
3077
3596
|
other = Utils.expr_to_lit_or_expr(other, str_to_lit: false)
|
3078
3597
|
end
|
3079
|
-
|
3598
|
+
_from_rbexpr(_rbexpr.is_in(other._rbexpr))
|
3080
3599
|
end
|
3081
3600
|
alias_method :in?, :is_in
|
3082
3601
|
|
@@ -3112,7 +3631,7 @@ module Polars
|
|
3112
3631
|
# # └─────────────────┘
|
3113
3632
|
def repeat_by(by)
|
3114
3633
|
by = Utils.expr_to_lit_or_expr(by, str_to_lit: false)
|
3115
|
-
|
3634
|
+
_from_rbexpr(_rbexpr.repeat_by(by._rbexpr))
|
3116
3635
|
end
|
3117
3636
|
|
3118
3637
|
# Check if this expression is between start and end.
|
@@ -3238,7 +3757,7 @@ module Polars
|
|
3238
3757
|
k1 = seed_1.nil? ? seed : seed_1
|
3239
3758
|
k2 = seed_2.nil? ? seed : seed_2
|
3240
3759
|
k3 = seed_3.nil? ? seed : seed_3
|
3241
|
-
|
3760
|
+
_from_rbexpr(_rbexpr._hash(k0, k1, k2, k3))
|
3242
3761
|
end
|
3243
3762
|
|
3244
3763
|
# Reinterpret the underlying bits as a signed/unsigned integer.
|
@@ -3272,7 +3791,7 @@ module Polars
|
|
3272
3791
|
# # │ 2 ┆ 2 │
|
3273
3792
|
# # └───────────────┴──────────┘
|
3274
3793
|
def reinterpret(signed: false)
|
3275
|
-
|
3794
|
+
_from_rbexpr(_rbexpr.reinterpret(signed))
|
3276
3795
|
end
|
3277
3796
|
|
3278
3797
|
# Print the value that this expression evaluates to and pass on the value.
|
@@ -3335,7 +3854,7 @@ module Polars
|
|
3335
3854
|
# # │ 3.0 ┆ 3.0 │
|
3336
3855
|
# # └─────┴─────┘
|
3337
3856
|
def interpolate(method: "linear")
|
3338
|
-
|
3857
|
+
_from_rbexpr(_rbexpr.interpolate(method))
|
3339
3858
|
end
|
3340
3859
|
|
3341
3860
|
# Apply a rolling min (moving min) over the values in this array.
|
@@ -3415,12 +3934,12 @@ module Polars
|
|
3415
3934
|
min_periods: nil,
|
3416
3935
|
center: false,
|
3417
3936
|
by: nil,
|
3418
|
-
closed:
|
3937
|
+
closed: nil
|
3419
3938
|
)
|
3420
3939
|
window_size, min_periods = _prepare_rolling_window_args(
|
3421
3940
|
window_size, min_periods
|
3422
3941
|
)
|
3423
|
-
|
3942
|
+
_from_rbexpr(
|
3424
3943
|
_rbexpr.rolling_min(
|
3425
3944
|
window_size, weights, min_periods, center, by, closed
|
3426
3945
|
)
|
@@ -3504,12 +4023,12 @@ module Polars
|
|
3504
4023
|
min_periods: nil,
|
3505
4024
|
center: false,
|
3506
4025
|
by: nil,
|
3507
|
-
closed:
|
4026
|
+
closed: nil
|
3508
4027
|
)
|
3509
4028
|
window_size, min_periods = _prepare_rolling_window_args(
|
3510
4029
|
window_size, min_periods
|
3511
4030
|
)
|
3512
|
-
|
4031
|
+
_from_rbexpr(
|
3513
4032
|
_rbexpr.rolling_max(
|
3514
4033
|
window_size, weights, min_periods, center, by, closed
|
3515
4034
|
)
|
@@ -3593,12 +4112,12 @@ module Polars
|
|
3593
4112
|
min_periods: nil,
|
3594
4113
|
center: false,
|
3595
4114
|
by: nil,
|
3596
|
-
closed:
|
4115
|
+
closed: nil
|
3597
4116
|
)
|
3598
4117
|
window_size, min_periods = _prepare_rolling_window_args(
|
3599
4118
|
window_size, min_periods
|
3600
4119
|
)
|
3601
|
-
|
4120
|
+
_from_rbexpr(
|
3602
4121
|
_rbexpr.rolling_mean(
|
3603
4122
|
window_size, weights, min_periods, center, by, closed
|
3604
4123
|
)
|
@@ -3682,12 +4201,12 @@ module Polars
|
|
3682
4201
|
min_periods: nil,
|
3683
4202
|
center: false,
|
3684
4203
|
by: nil,
|
3685
|
-
closed:
|
4204
|
+
closed: nil
|
3686
4205
|
)
|
3687
4206
|
window_size, min_periods = _prepare_rolling_window_args(
|
3688
4207
|
window_size, min_periods
|
3689
4208
|
)
|
3690
|
-
|
4209
|
+
_from_rbexpr(
|
3691
4210
|
_rbexpr.rolling_sum(
|
3692
4211
|
window_size, weights, min_periods, center, by, closed
|
3693
4212
|
)
|
@@ -3771,14 +4290,14 @@ module Polars
|
|
3771
4290
|
min_periods: nil,
|
3772
4291
|
center: false,
|
3773
4292
|
by: nil,
|
3774
|
-
closed:
|
4293
|
+
closed: nil,
|
3775
4294
|
ddof: 1,
|
3776
4295
|
warn_if_unsorted: true
|
3777
4296
|
)
|
3778
4297
|
window_size, min_periods = _prepare_rolling_window_args(
|
3779
4298
|
window_size, min_periods
|
3780
4299
|
)
|
3781
|
-
|
4300
|
+
_from_rbexpr(
|
3782
4301
|
_rbexpr.rolling_std(
|
3783
4302
|
window_size, weights, min_periods, center, by, closed, ddof, warn_if_unsorted
|
3784
4303
|
)
|
@@ -3862,14 +4381,14 @@ module Polars
|
|
3862
4381
|
min_periods: nil,
|
3863
4382
|
center: false,
|
3864
4383
|
by: nil,
|
3865
|
-
closed:
|
4384
|
+
closed: nil,
|
3866
4385
|
ddof: 1,
|
3867
4386
|
warn_if_unsorted: true
|
3868
4387
|
)
|
3869
4388
|
window_size, min_periods = _prepare_rolling_window_args(
|
3870
4389
|
window_size, min_periods
|
3871
4390
|
)
|
3872
|
-
|
4391
|
+
_from_rbexpr(
|
3873
4392
|
_rbexpr.rolling_var(
|
3874
4393
|
window_size, weights, min_periods, center, by, closed, ddof, warn_if_unsorted
|
3875
4394
|
)
|
@@ -3949,13 +4468,13 @@ module Polars
|
|
3949
4468
|
min_periods: nil,
|
3950
4469
|
center: false,
|
3951
4470
|
by: nil,
|
3952
|
-
closed:
|
4471
|
+
closed: nil,
|
3953
4472
|
warn_if_unsorted: true
|
3954
4473
|
)
|
3955
4474
|
window_size, min_periods = _prepare_rolling_window_args(
|
3956
4475
|
window_size, min_periods
|
3957
4476
|
)
|
3958
|
-
|
4477
|
+
_from_rbexpr(
|
3959
4478
|
_rbexpr.rolling_median(
|
3960
4479
|
window_size, weights, min_periods, center, by, closed, warn_if_unsorted
|
3961
4480
|
)
|
@@ -4041,13 +4560,13 @@ module Polars
|
|
4041
4560
|
min_periods: nil,
|
4042
4561
|
center: false,
|
4043
4562
|
by: nil,
|
4044
|
-
closed:
|
4563
|
+
closed: nil,
|
4045
4564
|
warn_if_unsorted: true
|
4046
4565
|
)
|
4047
4566
|
window_size, min_periods = _prepare_rolling_window_args(
|
4048
4567
|
window_size, min_periods
|
4049
4568
|
)
|
4050
|
-
|
4569
|
+
_from_rbexpr(
|
4051
4570
|
_rbexpr.rolling_quantile(
|
4052
4571
|
quantile, interpolation, window_size, weights, min_periods, center, by, closed, warn_if_unsorted
|
4053
4572
|
)
|
@@ -4111,7 +4630,7 @@ module Polars
|
|
4111
4630
|
# if min_periods.nil?
|
4112
4631
|
# min_periods = window_size
|
4113
4632
|
# end
|
4114
|
-
#
|
4633
|
+
# _from_rbexpr(
|
4115
4634
|
# _rbexpr.rolling_apply(
|
4116
4635
|
# function, window_size, weights, min_periods, center
|
4117
4636
|
# )
|
@@ -4127,7 +4646,7 @@ module Polars
|
|
4127
4646
|
#
|
4128
4647
|
# @return [Expr]
|
4129
4648
|
def rolling_skew(window_size, bias: true)
|
4130
|
-
|
4649
|
+
_from_rbexpr(_rbexpr.rolling_skew(window_size, bias))
|
4131
4650
|
end
|
4132
4651
|
|
4133
4652
|
# Compute absolute values.
|
@@ -4154,7 +4673,7 @@ module Polars
|
|
4154
4673
|
# # │ 2.0 │
|
4155
4674
|
# # └─────┘
|
4156
4675
|
def abs
|
4157
|
-
|
4676
|
+
_from_rbexpr(_rbexpr.abs)
|
4158
4677
|
end
|
4159
4678
|
|
4160
4679
|
# Get the index values that would sort this column.
|
@@ -4212,6 +4731,8 @@ module Polars
|
|
4212
4731
|
# on the order that the values occur in the Series.
|
4213
4732
|
# @param reverse [Boolean]
|
4214
4733
|
# Reverse the operation.
|
4734
|
+
# @param seed [Integer]
|
4735
|
+
# If `method: "random"`, use this as seed.
|
4215
4736
|
#
|
4216
4737
|
# @return [Expr]
|
4217
4738
|
#
|
@@ -4249,7 +4770,7 @@ module Polars
|
|
4249
4770
|
# # │ 5 │
|
4250
4771
|
# # └─────┘
|
4251
4772
|
def rank(method: "average", reverse: false, seed: nil)
|
4252
|
-
|
4773
|
+
_from_rbexpr(_rbexpr.rank(method, reverse, seed))
|
4253
4774
|
end
|
4254
4775
|
|
4255
4776
|
# Calculate the n-th discrete difference.
|
@@ -4280,7 +4801,7 @@ module Polars
|
|
4280
4801
|
# # │ 20 │
|
4281
4802
|
# # └──────┘
|
4282
4803
|
def diff(n: 1, null_behavior: "ignore")
|
4283
|
-
|
4804
|
+
_from_rbexpr(_rbexpr.diff(n, null_behavior))
|
4284
4805
|
end
|
4285
4806
|
|
4286
4807
|
# Computes percentage change between values.
|
@@ -4317,7 +4838,7 @@ module Polars
|
|
4317
4838
|
# # └──────┴────────────┘
|
4318
4839
|
def pct_change(n: 1)
|
4319
4840
|
n = Utils.parse_as_expression(n)
|
4320
|
-
|
4841
|
+
_from_rbexpr(_rbexpr.pct_change(n))
|
4321
4842
|
end
|
4322
4843
|
|
4323
4844
|
# Compute the sample skewness of a data set.
|
@@ -4346,7 +4867,7 @@ module Polars
|
|
4346
4867
|
# # │ 0.343622 │
|
4347
4868
|
# # └──────────┘
|
4348
4869
|
def skew(bias: true)
|
4349
|
-
|
4870
|
+
_from_rbexpr(_rbexpr.skew(bias))
|
4350
4871
|
end
|
4351
4872
|
|
4352
4873
|
# Compute the kurtosis (Fisher or Pearson) of a dataset.
|
@@ -4378,7 +4899,7 @@ module Polars
|
|
4378
4899
|
# # │ -1.153061 │
|
4379
4900
|
# # └───────────┘
|
4380
4901
|
def kurtosis(fisher: true, bias: true)
|
4381
|
-
|
4902
|
+
_from_rbexpr(_rbexpr.kurtosis(fisher, bias))
|
4382
4903
|
end
|
4383
4904
|
|
4384
4905
|
# Set values outside the given boundaries to the boundary value.
|
@@ -4415,7 +4936,7 @@ module Polars
|
|
4415
4936
|
if !upper_bound.nil?
|
4416
4937
|
upper_bound = Utils.parse_as_expression(upper_bound, str_as_lit: true)
|
4417
4938
|
end
|
4418
|
-
|
4939
|
+
_from_rbexpr(_rbexpr.clip(lower_bound, upper_bound))
|
4419
4940
|
end
|
4420
4941
|
|
4421
4942
|
# Clip (limit) the values in an array to a `min` boundary.
|
@@ -4500,7 +5021,7 @@ module Polars
|
|
4500
5021
|
# # │ -9223372036854775808 │
|
4501
5022
|
# # └──────────────────────┘
|
4502
5023
|
def lower_bound
|
4503
|
-
|
5024
|
+
_from_rbexpr(_rbexpr.lower_bound)
|
4504
5025
|
end
|
4505
5026
|
|
4506
5027
|
# Calculate the upper bound.
|
@@ -4523,7 +5044,7 @@ module Polars
|
|
4523
5044
|
# # │ 9223372036854775807 │
|
4524
5045
|
# # └─────────────────────┘
|
4525
5046
|
def upper_bound
|
4526
|
-
|
5047
|
+
_from_rbexpr(_rbexpr.upper_bound)
|
4527
5048
|
end
|
4528
5049
|
|
4529
5050
|
# Compute the element-wise indication of the sign.
|
@@ -4547,7 +5068,7 @@ module Polars
|
|
4547
5068
|
# # │ null │
|
4548
5069
|
# # └──────┘
|
4549
5070
|
def sign
|
4550
|
-
|
5071
|
+
_from_rbexpr(_rbexpr.sign)
|
4551
5072
|
end
|
4552
5073
|
|
4553
5074
|
# Compute the element-wise value for the sine.
|
@@ -4567,7 +5088,7 @@ module Polars
|
|
4567
5088
|
# # │ 0.0 │
|
4568
5089
|
# # └─────┘
|
4569
5090
|
def sin
|
4570
|
-
|
5091
|
+
_from_rbexpr(_rbexpr.sin)
|
4571
5092
|
end
|
4572
5093
|
|
4573
5094
|
# Compute the element-wise value for the cosine.
|
@@ -4587,7 +5108,7 @@ module Polars
|
|
4587
5108
|
# # │ 1.0 │
|
4588
5109
|
# # └─────┘
|
4589
5110
|
def cos
|
4590
|
-
|
5111
|
+
_from_rbexpr(_rbexpr.cos)
|
4591
5112
|
end
|
4592
5113
|
|
4593
5114
|
# Compute the element-wise value for the tangent.
|
@@ -4607,7 +5128,7 @@ module Polars
|
|
4607
5128
|
# # │ 1.557408 │
|
4608
5129
|
# # └──────────┘
|
4609
5130
|
def tan
|
4610
|
-
|
5131
|
+
_from_rbexpr(_rbexpr.tan)
|
4611
5132
|
end
|
4612
5133
|
|
4613
5134
|
# Compute the element-wise value for the inverse sine.
|
@@ -4627,7 +5148,7 @@ module Polars
|
|
4627
5148
|
# # │ 1.570796 │
|
4628
5149
|
# # └──────────┘
|
4629
5150
|
def arcsin
|
4630
|
-
|
5151
|
+
_from_rbexpr(_rbexpr.arcsin)
|
4631
5152
|
end
|
4632
5153
|
|
4633
5154
|
# Compute the element-wise value for the inverse cosine.
|
@@ -4647,7 +5168,7 @@ module Polars
|
|
4647
5168
|
# # │ 1.570796 │
|
4648
5169
|
# # └──────────┘
|
4649
5170
|
def arccos
|
4650
|
-
|
5171
|
+
_from_rbexpr(_rbexpr.arccos)
|
4651
5172
|
end
|
4652
5173
|
|
4653
5174
|
# Compute the element-wise value for the inverse tangent.
|
@@ -4667,7 +5188,7 @@ module Polars
|
|
4667
5188
|
# # │ 0.785398 │
|
4668
5189
|
# # └──────────┘
|
4669
5190
|
def arctan
|
4670
|
-
|
5191
|
+
_from_rbexpr(_rbexpr.arctan)
|
4671
5192
|
end
|
4672
5193
|
|
4673
5194
|
# Compute the element-wise value for the hyperbolic sine.
|
@@ -4687,7 +5208,7 @@ module Polars
|
|
4687
5208
|
# # │ 1.175201 │
|
4688
5209
|
# # └──────────┘
|
4689
5210
|
def sinh
|
4690
|
-
|
5211
|
+
_from_rbexpr(_rbexpr.sinh)
|
4691
5212
|
end
|
4692
5213
|
|
4693
5214
|
# Compute the element-wise value for the hyperbolic cosine.
|
@@ -4707,7 +5228,7 @@ module Polars
|
|
4707
5228
|
# # │ 1.543081 │
|
4708
5229
|
# # └──────────┘
|
4709
5230
|
def cosh
|
4710
|
-
|
5231
|
+
_from_rbexpr(_rbexpr.cosh)
|
4711
5232
|
end
|
4712
5233
|
|
4713
5234
|
# Compute the element-wise value for the hyperbolic tangent.
|
@@ -4727,7 +5248,7 @@ module Polars
|
|
4727
5248
|
# # │ 0.761594 │
|
4728
5249
|
# # └──────────┘
|
4729
5250
|
def tanh
|
4730
|
-
|
5251
|
+
_from_rbexpr(_rbexpr.tanh)
|
4731
5252
|
end
|
4732
5253
|
|
4733
5254
|
# Compute the element-wise value for the inverse hyperbolic sine.
|
@@ -4747,7 +5268,7 @@ module Polars
|
|
4747
5268
|
# # │ 0.881374 │
|
4748
5269
|
# # └──────────┘
|
4749
5270
|
def arcsinh
|
4750
|
-
|
5271
|
+
_from_rbexpr(_rbexpr.arcsinh)
|
4751
5272
|
end
|
4752
5273
|
|
4753
5274
|
# Compute the element-wise value for the inverse hyperbolic cosine.
|
@@ -4767,7 +5288,7 @@ module Polars
|
|
4767
5288
|
# # │ 0.0 │
|
4768
5289
|
# # └─────┘
|
4769
5290
|
def arccosh
|
4770
|
-
|
5291
|
+
_from_rbexpr(_rbexpr.arccosh)
|
4771
5292
|
end
|
4772
5293
|
|
4773
5294
|
# Compute the element-wise value for the inverse hyperbolic tangent.
|
@@ -4787,7 +5308,7 @@ module Polars
|
|
4787
5308
|
# # │ inf │
|
4788
5309
|
# # └─────┘
|
4789
5310
|
def arctanh
|
4790
|
-
|
5311
|
+
_from_rbexpr(_rbexpr.arctanh)
|
4791
5312
|
end
|
4792
5313
|
|
4793
5314
|
# Reshape this Expr to a flat Series or a Series of Lists.
|
@@ -4813,7 +5334,7 @@ module Polars
|
|
4813
5334
|
# # │ [7, 8, 9] │
|
4814
5335
|
# # └───────────┘
|
4815
5336
|
def reshape(dims)
|
4816
|
-
|
5337
|
+
_from_rbexpr(_rbexpr.reshape(dims))
|
4817
5338
|
end
|
4818
5339
|
|
4819
5340
|
# Shuffle the contents of this expr.
|
@@ -4842,7 +5363,7 @@ module Polars
|
|
4842
5363
|
if seed.nil?
|
4843
5364
|
seed = rand(10000)
|
4844
5365
|
end
|
4845
|
-
|
5366
|
+
_from_rbexpr(_rbexpr.shuffle(seed))
|
4846
5367
|
end
|
4847
5368
|
|
4848
5369
|
# Sample from this expression.
|
@@ -4888,14 +5409,14 @@ module Polars
|
|
4888
5409
|
|
4889
5410
|
if !n.nil? && frac.nil?
|
4890
5411
|
n = Utils.parse_as_expression(n)
|
4891
|
-
return
|
5412
|
+
return _from_rbexpr(_rbexpr.sample_n(n, with_replacement, shuffle, seed))
|
4892
5413
|
end
|
4893
5414
|
|
4894
5415
|
if frac.nil?
|
4895
5416
|
frac = 1.0
|
4896
5417
|
end
|
4897
5418
|
frac = Utils.parse_as_expression(frac)
|
4898
|
-
|
5419
|
+
_from_rbexpr(
|
4899
5420
|
_rbexpr.sample_frac(frac, with_replacement, shuffle, seed)
|
4900
5421
|
)
|
4901
5422
|
end
|
@@ -4928,7 +5449,7 @@ module Polars
|
|
4928
5449
|
ignore_nulls: true
|
4929
5450
|
)
|
4930
5451
|
alpha = _prepare_alpha(com, span, half_life, alpha)
|
4931
|
-
|
5452
|
+
_from_rbexpr(_rbexpr.ewm_mean(alpha, adjust, min_periods, ignore_nulls))
|
4932
5453
|
end
|
4933
5454
|
|
4934
5455
|
# Exponentially-weighted moving standard deviation.
|
@@ -4960,7 +5481,7 @@ module Polars
|
|
4960
5481
|
ignore_nulls: true
|
4961
5482
|
)
|
4962
5483
|
alpha = _prepare_alpha(com, span, half_life, alpha)
|
4963
|
-
|
5484
|
+
_from_rbexpr(_rbexpr.ewm_std(alpha, adjust, bias, min_periods, ignore_nulls))
|
4964
5485
|
end
|
4965
5486
|
|
4966
5487
|
# Exponentially-weighted moving variance.
|
@@ -4992,7 +5513,7 @@ module Polars
|
|
4992
5513
|
ignore_nulls: true
|
4993
5514
|
)
|
4994
5515
|
alpha = _prepare_alpha(com, span, half_life, alpha)
|
4995
|
-
|
5516
|
+
_from_rbexpr(_rbexpr.ewm_var(alpha, adjust, bias, min_periods, ignore_nulls))
|
4996
5517
|
end
|
4997
5518
|
|
4998
5519
|
# Extend the Series with given number of values.
|
@@ -5022,7 +5543,7 @@ module Polars
|
|
5022
5543
|
# # │ 99 │
|
5023
5544
|
# # └────────┘
|
5024
5545
|
def extend_constant(value, n)
|
5025
|
-
|
5546
|
+
_from_rbexpr(_rbexpr.extend_constant(value, n))
|
5026
5547
|
end
|
5027
5548
|
|
5028
5549
|
# Count all unique values and create a struct mapping value to count.
|
@@ -5058,7 +5579,7 @@ module Polars
|
|
5058
5579
|
# # │ {"a",1} │
|
5059
5580
|
# # └───────────┘
|
5060
5581
|
def value_counts(multithreaded: false, sort: false)
|
5061
|
-
|
5582
|
+
_from_rbexpr(_rbexpr.value_counts(multithreaded, sort))
|
5062
5583
|
end
|
5063
5584
|
|
5064
5585
|
# Return a count of the unique values in the order of appearance.
|
@@ -5091,7 +5612,7 @@ module Polars
|
|
5091
5612
|
# # │ 3 │
|
5092
5613
|
# # └─────┘
|
5093
5614
|
def unique_counts
|
5094
|
-
|
5615
|
+
_from_rbexpr(_rbexpr.unique_counts)
|
5095
5616
|
end
|
5096
5617
|
|
5097
5618
|
# Compute the logarithm to a given base.
|
@@ -5116,7 +5637,7 @@ module Polars
|
|
5116
5637
|
# # │ 1.584963 │
|
5117
5638
|
# # └──────────┘
|
5118
5639
|
def log(base = Math::E)
|
5119
|
-
|
5640
|
+
_from_rbexpr(_rbexpr.log(base))
|
5120
5641
|
end
|
5121
5642
|
|
5122
5643
|
# Computes the entropy.
|
@@ -5155,7 +5676,7 @@ module Polars
|
|
5155
5676
|
# # │ -6.754888 │
|
5156
5677
|
# # └───────────┘
|
5157
5678
|
def entropy(base: 2, normalize: true)
|
5158
|
-
|
5679
|
+
_from_rbexpr(_rbexpr.entropy(base, normalize))
|
5159
5680
|
end
|
5160
5681
|
|
5161
5682
|
# Run an expression over a sliding window that increases `1` slot every iteration.
|
@@ -5193,16 +5714,16 @@ module Polars
|
|
5193
5714
|
# # ┌────────┐
|
5194
5715
|
# # │ values │
|
5195
5716
|
# # │ --- │
|
5196
|
-
# # │
|
5717
|
+
# # │ i64 │
|
5197
5718
|
# # ╞════════╡
|
5198
|
-
# # │ 0
|
5199
|
-
# # │ -3
|
5200
|
-
# # │ -8
|
5201
|
-
# # │ -15
|
5202
|
-
# # │ -24
|
5719
|
+
# # │ 0 │
|
5720
|
+
# # │ -3 │
|
5721
|
+
# # │ -8 │
|
5722
|
+
# # │ -15 │
|
5723
|
+
# # │ -24 │
|
5203
5724
|
# # └────────┘
|
5204
5725
|
def cumulative_eval(expr, min_periods: 1, parallel: false)
|
5205
|
-
|
5726
|
+
_from_rbexpr(
|
5206
5727
|
_rbexpr.cumulative_eval(expr._rbexpr, min_periods, parallel)
|
5207
5728
|
)
|
5208
5729
|
end
|
@@ -5233,7 +5754,7 @@ module Polars
|
|
5233
5754
|
# # │ 3 │
|
5234
5755
|
# # └────────┘
|
5235
5756
|
def set_sorted(descending: false)
|
5236
|
-
|
5757
|
+
_from_rbexpr(_rbexpr.set_sorted_flag(descending))
|
5237
5758
|
end
|
5238
5759
|
|
5239
5760
|
# Aggregate to list.
|
@@ -5258,7 +5779,7 @@ module Polars
|
|
5258
5779
|
# # │ [1, 2, 3] ┆ [4, 5, 6] │
|
5259
5780
|
# # └───────────┴───────────┘
|
5260
5781
|
def implode
|
5261
|
-
|
5782
|
+
_from_rbexpr(_rbexpr.implode)
|
5262
5783
|
end
|
5263
5784
|
|
5264
5785
|
# Shrink numeric columns to the minimal required datatype.
|
@@ -5293,7 +5814,169 @@ module Polars
|
|
5293
5814
|
# # │ 3 ┆ 8589934592 ┆ 1073741824 ┆ 112 ┆ 129 ┆ c ┆ 0.12 ┆ false │
|
5294
5815
|
# # └─────┴────────────┴────────────┴──────┴──────┴─────┴──────┴───────┘
|
5295
5816
|
def shrink_dtype
|
5296
|
-
|
5817
|
+
_from_rbexpr(_rbexpr.shrink_dtype)
|
5818
|
+
end
|
5819
|
+
|
5820
|
+
# Replace values by different values.
|
5821
|
+
#
|
5822
|
+
# @param old [Object]
|
5823
|
+
# Value or sequence of values to replace.
|
5824
|
+
# Accepts expression input. Sequences are parsed as Series,
|
5825
|
+
# other non-expression inputs are parsed as literals.
|
5826
|
+
# Also accepts a mapping of values to their replacement.
|
5827
|
+
# @param new [Object]
|
5828
|
+
# Value or sequence of values to replace by.
|
5829
|
+
# Accepts expression input. Sequences are parsed as Series,
|
5830
|
+
# other non-expression inputs are parsed as literals.
|
5831
|
+
# Length must match the length of `old` or have length 1.
|
5832
|
+
# @param default [Object]
|
5833
|
+
# Set values that were not replaced to this value.
|
5834
|
+
# Defaults to keeping the original value.
|
5835
|
+
# Accepts expression input. Non-expression inputs are parsed as literals.
|
5836
|
+
# @param return_dtype [Object]
|
5837
|
+
# The data type of the resulting expression. If set to `nil` (default),
|
5838
|
+
# the data type is determined automatically based on the other inputs.
|
5839
|
+
#
|
5840
|
+
# @return [Expr]
|
5841
|
+
#
|
5842
|
+
# @example Replace a single value by another value. Values that were not replaced remain unchanged.
|
5843
|
+
# df = Polars::DataFrame.new({"a" => [1, 2, 2, 3]})
|
5844
|
+
# df.with_columns(replaced: Polars.col("a").replace(2, 100))
|
5845
|
+
# # =>
|
5846
|
+
# # shape: (4, 2)
|
5847
|
+
# # ┌─────┬──────────┐
|
5848
|
+
# # │ a ┆ replaced │
|
5849
|
+
# # │ --- ┆ --- │
|
5850
|
+
# # │ i64 ┆ i64 │
|
5851
|
+
# # ╞═════╪══════════╡
|
5852
|
+
# # │ 1 ┆ 1 │
|
5853
|
+
# # │ 2 ┆ 100 │
|
5854
|
+
# # │ 2 ┆ 100 │
|
5855
|
+
# # │ 3 ┆ 3 │
|
5856
|
+
# # └─────┴──────────┘
|
5857
|
+
#
|
5858
|
+
# @example Replace multiple values by passing sequences to the `old` and `new` parameters.
|
5859
|
+
# df.with_columns(replaced: Polars.col("a").replace([2, 3], [100, 200]))
|
5860
|
+
# # =>
|
5861
|
+
# # shape: (4, 2)
|
5862
|
+
# # ┌─────┬──────────┐
|
5863
|
+
# # │ a ┆ replaced │
|
5864
|
+
# # │ --- ┆ --- │
|
5865
|
+
# # │ i64 ┆ i64 │
|
5866
|
+
# # ╞═════╪══════════╡
|
5867
|
+
# # │ 1 ┆ 1 │
|
5868
|
+
# # │ 2 ┆ 100 │
|
5869
|
+
# # │ 2 ┆ 100 │
|
5870
|
+
# # │ 3 ┆ 200 │
|
5871
|
+
# # └─────┴──────────┘
|
5872
|
+
#
|
5873
|
+
# @example Passing a mapping with replacements is also supported as syntactic sugar. Specify a default to set all values that were not matched.
|
5874
|
+
# mapping = {2 => 100, 3 => 200}
|
5875
|
+
# df.with_columns(replaced: Polars.col("a").replace(mapping, default: -1))
|
5876
|
+
# # =>
|
5877
|
+
# # shape: (4, 2)
|
5878
|
+
# # ┌─────┬──────────┐
|
5879
|
+
# # │ a ┆ replaced │
|
5880
|
+
# # │ --- ┆ --- │
|
5881
|
+
# # │ i64 ┆ i64 │
|
5882
|
+
# # ╞═════╪══════════╡
|
5883
|
+
# # │ 1 ┆ -1 │
|
5884
|
+
# # │ 2 ┆ 100 │
|
5885
|
+
# # │ 2 ┆ 100 │
|
5886
|
+
# # │ 3 ┆ 200 │
|
5887
|
+
# # └─────┴──────────┘
|
5888
|
+
#
|
5889
|
+
# @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.
|
5890
|
+
# df = Polars::DataFrame.new({"a" => ["x", "y", "z"]})
|
5891
|
+
# mapping = {"x" => 1, "y" => 2, "z" => 3}
|
5892
|
+
# df.with_columns(replaced: Polars.col("a").replace(mapping))
|
5893
|
+
# # =>
|
5894
|
+
# # shape: (3, 2)
|
5895
|
+
# # ┌─────┬──────────┐
|
5896
|
+
# # │ a ┆ replaced │
|
5897
|
+
# # │ --- ┆ --- │
|
5898
|
+
# # │ str ┆ str │
|
5899
|
+
# # ╞═════╪══════════╡
|
5900
|
+
# # │ x ┆ 1 │
|
5901
|
+
# # │ y ┆ 2 │
|
5902
|
+
# # │ z ┆ 3 │
|
5903
|
+
# # └─────┴──────────┘
|
5904
|
+
#
|
5905
|
+
# @example
|
5906
|
+
# df.with_columns(replaced: Polars.col("a").replace(mapping, default: nil))
|
5907
|
+
# # =>
|
5908
|
+
# # shape: (3, 2)
|
5909
|
+
# # ┌─────┬──────────┐
|
5910
|
+
# # │ a ┆ replaced │
|
5911
|
+
# # │ --- ┆ --- │
|
5912
|
+
# # │ str ┆ i64 │
|
5913
|
+
# # ╞═════╪══════════╡
|
5914
|
+
# # │ x ┆ 1 │
|
5915
|
+
# # │ y ┆ 2 │
|
5916
|
+
# # │ z ┆ 3 │
|
5917
|
+
# # └─────┴──────────┘
|
5918
|
+
#
|
5919
|
+
# @example Set the `return_dtype` parameter to control the resulting data type directly.
|
5920
|
+
# df.with_columns(
|
5921
|
+
# replaced: Polars.col("a").replace(mapping, return_dtype: Polars::UInt8)
|
5922
|
+
# )
|
5923
|
+
# # =>
|
5924
|
+
# # shape: (3, 2)
|
5925
|
+
# # ┌─────┬──────────┐
|
5926
|
+
# # │ a ┆ replaced │
|
5927
|
+
# # │ --- ┆ --- │
|
5928
|
+
# # │ str ┆ u8 │
|
5929
|
+
# # ╞═════╪══════════╡
|
5930
|
+
# # │ x ┆ 1 │
|
5931
|
+
# # │ y ┆ 2 │
|
5932
|
+
# # │ z ┆ 3 │
|
5933
|
+
# # └─────┴──────────┘
|
5934
|
+
#
|
5935
|
+
# @example Expression input is supported for all parameters.
|
5936
|
+
# df = Polars::DataFrame.new({"a" => [1, 2, 2, 3], "b" => [1.5, 2.5, 5.0, 1.0]})
|
5937
|
+
# df.with_columns(
|
5938
|
+
# replaced: Polars.col("a").replace(
|
5939
|
+
# Polars.col("a").max,
|
5940
|
+
# Polars.col("b").sum,
|
5941
|
+
# default: Polars.col("b")
|
5942
|
+
# )
|
5943
|
+
# )
|
5944
|
+
# # =>
|
5945
|
+
# # shape: (4, 3)
|
5946
|
+
# # ┌─────┬─────┬──────────┐
|
5947
|
+
# # │ a ┆ b ┆ replaced │
|
5948
|
+
# # │ --- ┆ --- ┆ --- │
|
5949
|
+
# # │ i64 ┆ f64 ┆ f64 │
|
5950
|
+
# # ╞═════╪═════╪══════════╡
|
5951
|
+
# # │ 1 ┆ 1.5 ┆ 1.5 │
|
5952
|
+
# # │ 2 ┆ 2.5 ┆ 2.5 │
|
5953
|
+
# # │ 2 ┆ 5.0 ┆ 5.0 │
|
5954
|
+
# # │ 3 ┆ 1.0 ┆ 10.0 │
|
5955
|
+
# # └─────┴─────┴──────────┘
|
5956
|
+
def replace(old, new = NO_DEFAULT, default: NO_DEFAULT, return_dtype: nil)
|
5957
|
+
if new.eql?(NO_DEFAULT) && old.is_a?(Hash)
|
5958
|
+
new = Series.new(old.values)
|
5959
|
+
old = Series.new(old.keys)
|
5960
|
+
else
|
5961
|
+
if old.is_a?(::Array)
|
5962
|
+
old = Series.new(old)
|
5963
|
+
end
|
5964
|
+
if new.is_a?(::Array)
|
5965
|
+
new = Series.new(new)
|
5966
|
+
end
|
5967
|
+
end
|
5968
|
+
|
5969
|
+
old = Utils.parse_as_expression(old, str_as_lit: true)
|
5970
|
+
new = Utils.parse_as_expression(new, str_as_lit: true)
|
5971
|
+
|
5972
|
+
default =
|
5973
|
+
if default.eql?(NO_DEFAULT)
|
5974
|
+
nil
|
5975
|
+
else
|
5976
|
+
Utils.parse_as_expression(default, str_as_lit: true)
|
5977
|
+
end
|
5978
|
+
|
5979
|
+
_from_rbexpr(_rbexpr.replace(old, new, default, return_dtype))
|
5297
5980
|
end
|
5298
5981
|
|
5299
5982
|
# Create an object namespace of all list related methods.
|
@@ -5361,7 +6044,7 @@ module Polars
|
|
5361
6044
|
|
5362
6045
|
private
|
5363
6046
|
|
5364
|
-
def
|
6047
|
+
def _from_rbexpr(expr)
|
5365
6048
|
Utils.wrap_expr(expr)
|
5366
6049
|
end
|
5367
6050
|
|