@@ -289,7 +289,6 @@ def _populate_expr_impl_map() -> Dict[int, Dict[str, Callable]]:
289289 "%/%" : lambda a , b : a / b ,
290290 "around" : lambda a , b : a .round (b ),
291291 "coalesce" : lambda a , b : pl .when (a .is_null ()).then (b ).otherwise (a ),
292- "concat" : lambda a , b : a .concat (b ),
293292 "date_diff" : lambda a , b : a .date_diff (b ),
294293 "is_in" : lambda a , b : a .is_in (b ),
295294 "mod" : lambda a , b : a % b ,
@@ -367,6 +366,7 @@ def __init__(self, *, use_lazy_eval: bool = True):
367366 }
368367 self ._expr_impl_map = _populate_expr_impl_map ()
369368 self ._impl_map_arbitrary_arity = {
369+ "concat" : lambda * args : pl .concat_str (args ),
370370 "fmax" : lambda * args : pl .max (args ),
371371 "fmin" : lambda * args : pl .min (args ),
372372 "maximum" : lambda * args : pl .max (args ),
@@ -440,9 +440,19 @@ def bad_column_positions(self, x):
440440 """
441441 return x .is_null ()
442442
443+ def concat_rows (self , frame_list : List ):
444+ """
445+ Concatenate rows from frame_list
446+ """
447+ frame_list = list (frame_list )
448+ assert len (frame_list ) > 0
449+ if len (frame_list ) == 1 :
450+ return frame_list [0 ]
451+ pl .concat (frame_list , how = "vertical" )
452+
443453 def concat_columns (self , frame_list ):
444454 """
445- Concatinate columns from frame_list
455+ Concatenate columns from frame_list
446456 """
447457 frame_list = list (frame_list )
448458 if len (frame_list ) <= 0 :
0 commit comments