lib/polars/struct_expr.rb in polars-df-0.1.2 vs lib/polars/struct_expr.rb in polars-df-0.1.3

- old
+ new

@@ -1,26 +1,99 @@ module Polars + # Namespace for struct related expressions. class StructExpr + # @private attr_accessor :_rbexpr + # @private def initialize(expr) self._rbexpr = expr._rbexpr end + # Retrieve one of the fields of this `Struct` as a new Series. + # + # @return [Expr] def [](item) if item.is_a?(String) field(item) elsif item.is_a?(Integer) Utils.wrap_expr(_rbexpr.struct_field_by_index(item)) else raise ArgumentError, "expected type Integer or String, got #{item.class.name}" end end + # Retrieve one of the fields of this `Struct` as a new Series. + # + # @param name [String] + # Name of the field + # + # @return [Expr] + # + # @example + # df = ( + # Polars::DataFrame.new( + # { + # "int" => [1, 2], + # "str" => ["a", "b"], + # "bool" => [true, nil], + # "list" => [[1, 2], [3]] + # } + # ) + # .to_struct("my_struct") + # .to_frame + # ) + # df.select(Polars.col("my_struct").struct.field("str")) + # # => + # # shape: (2, 1) + # # ┌─────┐ + # # │ str │ + # # │ --- │ + # # │ str │ + # # ╞═════╡ + # # │ a │ + # # ├╌╌╌╌╌┤ + # # │ b │ + # # └─────┘ def field(name) Utils.wrap_expr(_rbexpr.struct_field_by_name(name)) end + # Rename the fields of the struct. + # + # @param names [Array] + # New names in the order of the struct's fields + # + # @return [Expr] + # + # @example + # df = ( + # Polars::DataFrame.new( + # { + # "int" => [1, 2], + # "str" => ["a", "b"], + # "bool" => [true, nil], + # "list" => [[1, 2], [3]] + # } + # ) + # .to_struct("my_struct") + # .to_frame + # ) + # df = df.with_column( + # Polars.col("my_struct").struct.rename_fields(["INT", "STR", "BOOL", "LIST"]) + # ) + # df.select(Polars.col("my_struct").struct.field("INT")) + # # => + # # shape: (2, 1) + # # ┌─────┐ + # # │ INT │ + # # │ --- │ + # # │ i64 │ + # # ╞═════╡ + # # │ 1 │ + # # ├╌╌╌╌╌┤ + # # │ 2 │ + # # └─────┘ def rename_fields(names) Utils.wrap_expr(_rbexpr.struct_rename_fields(names)) end end end