File tree Expand file tree Collapse file tree 8 files changed +28
-43
lines changed Expand file tree Collapse file tree 8 files changed +28
-43
lines changed Original file line number Diff line number Diff line change @@ -94,27 +94,20 @@ def func(df: ArrowDataFrame) -> list[ArrowSeries]:
9494 )
9595
9696 @classmethod
97- def from_column_indices (
98- cls : type [Self ], * column_indices : int , context : _FullContext
99- ) -> Self :
100- from narwhals ._arrow .series import ArrowSeries
101-
97+ def from_column_indices (cls , * column_indices : int , context : _FullContext ) -> Self :
10298 def func (df : ArrowDataFrame ) -> list [ArrowSeries ]:
99+ tbl = df .native
100+ cols = df .columns
103101 return [
104- ArrowSeries (
105- df .native [column_index ],
106- name = df .native .column_names [column_index ],
107- backend_version = df ._backend_version ,
108- version = df ._version ,
109- )
110- for column_index in column_indices
102+ ArrowSeries .from_native (tbl [i ], name = cols [i ], context = df )
103+ for i in column_indices
111104 ]
112105
113106 return cls (
114107 func ,
115108 depth = 0 ,
116109 function_name = "nth" ,
117- evaluate_output_names = lambda df : [ df . columns [ i ] for i in column_indices ] ,
110+ evaluate_output_names = cls . _eval_names_indices ( column_indices ) ,
118111 alias_output_names = None ,
119112 backend_version = context ._backend_version ,
120113 version = context ._version ,
Original file line number Diff line number Diff line change @@ -109,9 +109,14 @@ def from_column_names(
109109 context : _FullContext ,
110110 ) -> Self : ...
111111 @classmethod
112- def from_column_indices (
113- cls : type [Self ], * column_indices : int , context : _FullContext
114- ) -> Self : ...
112+ def from_column_indices (cls , * column_indices : int , context : _FullContext ) -> Self : ...
113+ @staticmethod
114+ def _eval_names_indices (indices : Sequence [int ], / ) -> EvalNames [CompliantFrameT ]:
115+ def fn (df : CompliantFrameT ) -> Sequence [str ]:
116+ column_names = df .columns
117+ return [column_names [i ] for i in indices ]
118+
119+ return fn
115120
116121 def is_null (self ) -> Self : ...
117122 def abs (self ) -> Self : ...
Original file line number Diff line number Diff line change @@ -135,19 +135,15 @@ def func(df: DaskLazyFrame) -> list[dx.Series]:
135135 )
136136
137137 @classmethod
138- def from_column_indices (
139- cls : type [Self ], * column_indices : int , context : _FullContext
140- ) -> Self :
138+ def from_column_indices (cls , * column_indices : int , context : _FullContext ) -> Self :
141139 def func (df : DaskLazyFrame ) -> list [dx .Series ]:
142- return [
143- df ._native_frame .iloc [:, column_index ] for column_index in column_indices
144- ]
140+ return [df .native .iloc [:, i ] for i in column_indices ]
145141
146142 return cls (
147143 func ,
148144 depth = 0 ,
149145 function_name = "nth" ,
150- evaluate_output_names = lambda df : [ df . columns [ i ] for i in column_indices ] ,
146+ evaluate_output_names = cls . _eval_names_indices ( column_indices ) ,
151147 alias_output_names = None ,
152148 backend_version = context ._backend_version ,
153149 version = context ._version ,
Original file line number Diff line number Diff line change @@ -206,7 +206,7 @@ def func(df: DuckDBLazyFrame) -> list[duckdb.Expression]:
206206
207207 return cls (
208208 func ,
209- evaluate_output_names = lambda df : [ df . columns [ i ] for i in column_indices ] ,
209+ evaluate_output_names = cls . _eval_names_indices ( column_indices ) ,
210210 alias_output_names = None ,
211211 backend_version = context ._backend_version ,
212212 version = context ._version ,
Original file line number Diff line number Diff line change @@ -197,15 +197,13 @@ def func(df: IbisLazyFrame) -> list[ir.Column]:
197197 )
198198
199199 @classmethod
200- def from_column_indices (
201- cls : type [Self ], * column_indices : int , context : _FullContext
202- ) -> Self :
200+ def from_column_indices (cls , * column_indices : int , context : _FullContext ) -> Self :
203201 def func (df : IbisLazyFrame ) -> list [ir .Column ]:
204202 return [df .native [i ] for i in column_indices ]
205203
206204 return cls (
207205 func ,
208- evaluate_output_names = lambda df : [ df . columns [ i ] for i in column_indices ] ,
206+ evaluate_output_names = cls . _eval_names_indices ( column_indices ) ,
209207 alias_output_names = None ,
210208 backend_version = context ._backend_version ,
211209 version = context ._version ,
Original file line number Diff line number Diff line change @@ -148,25 +148,19 @@ def func(df: PandasLikeDataFrame) -> list[PandasLikeSeries]:
148148 )
149149
150150 @classmethod
151- def from_column_indices (
152- cls : type [Self ], * column_indices : int , context : _FullContext
153- ) -> Self :
151+ def from_column_indices (cls , * column_indices : int , context : _FullContext ) -> Self :
154152 def func (df : PandasLikeDataFrame ) -> list [PandasLikeSeries ]:
153+ native = df .native
155154 return [
156- PandasLikeSeries (
157- df ._native_frame .iloc [:, column_index ],
158- implementation = df ._implementation ,
159- backend_version = df ._backend_version ,
160- version = df ._version ,
161- )
162- for column_index in column_indices
155+ PandasLikeSeries .from_native (native .iloc [:, i ], context = df )
156+ for i in column_indices
163157 ]
164158
165159 return cls (
166160 func ,
167161 depth = 0 ,
168162 function_name = "nth" ,
169- evaluate_output_names = lambda df : [ df . columns [ i ] for i in column_indices ] ,
163+ evaluate_output_names = cls . _eval_names_indices ( column_indices ) ,
170164 alias_output_names = None ,
171165 implementation = context ._implementation ,
172166 backend_version = context ._backend_version ,
Original file line number Diff line number Diff line change @@ -263,6 +263,7 @@ def struct(self) -> PolarsExprStructNamespace:
263263 __call__ : Any
264264 from_column_names : Any
265265 from_column_indices : Any
266+ _eval_names_indices : Any
266267
267268 # Polars
268269 abs : Method [Self ]
Original file line number Diff line number Diff line change @@ -299,16 +299,14 @@ def func(df: SparkLikeLazyFrame) -> list[Column]:
299299 )
300300
301301 @classmethod
302- def from_column_indices (
303- cls : type [Self ], * column_indices : int , context : _FullContext
304- ) -> Self :
302+ def from_column_indices (cls , * column_indices : int , context : _FullContext ) -> Self :
305303 def func (df : SparkLikeLazyFrame ) -> list [Column ]:
306304 columns = df .columns
307305 return [df ._F .col (columns [i ]) for i in column_indices ]
308306
309307 return cls (
310308 func ,
311- evaluate_output_names = lambda df : [ df . columns [ i ] for i in column_indices ] ,
309+ evaluate_output_names = cls . _eval_names_indices ( column_indices ) ,
312310 alias_output_names = None ,
313311 backend_version = context ._backend_version ,
314312 version = context ._version ,
You can’t perform that action at this time.
0 commit comments