@@ -504,6 +504,41 @@ def test_groupby_agg(session, func):
504504 assert_frame_equal (snow_result4 , native_result4 , check_dtype = False )
505505
506506
507+ @sql_count_checker (query_count = 9 , join_count = 1 , udtf_count = 1 )
508+ def test_groupby_apply (session ):
509+ with session_parameter_override (
510+ session , "dummy_row_pos_optimization_enabled" , True
511+ ):
512+ # create tables
513+ table_name = Utils .random_name_for_temp_object (TempObjectType .TABLE )
514+ session .create_dataframe (
515+ native_pd .DataFrame ([[2 , 12 ], [2 , 11 ], [3 , 13 ]], columns = ["A" , "B" ])
516+ ).write .save_as_table (table_name , table_type = "temp" )
517+
518+ # create snow dataframes
519+ df = pd .read_snowflake (table_name ).sort_values ("B" , ignore_index = True )
520+ snow_result = df .groupby ("A" ).apply (lambda x : x + 1 )
521+
522+ # verify that the input dataframe has a populated relaxed query compiler
523+ assert df ._query_compiler ._relaxed_query_compiler is not None
524+ assert df ._query_compiler ._relaxed_query_compiler ._dummy_row_pos_mode is True
525+ # verify that the output dataframe also has a populated relaxed query compiler
526+ assert snow_result ._query_compiler ._relaxed_query_compiler is not None
527+ assert (
528+ snow_result ._query_compiler ._relaxed_query_compiler ._dummy_row_pos_mode
529+ is True
530+ )
531+
532+ # create pandas dataframes
533+ native_df = df .to_pandas ()
534+ native_result = native_df .groupby ("A" ).apply (lambda x : x + 1 )
535+
536+ # compare results
537+ assert_frame_equal (
538+ snow_result , native_result , check_dtype = False , check_index_type = False
539+ )
540+
541+
507542@sql_count_checker (query_count = 5 )
508543def test_iloc_head (session ):
509544 with session_parameter_override (
0 commit comments