@@ -873,3 +873,62 @@ def test_groupby_resample_then_groupby_is_reused_when_index_is_set_from_column()
873873 result_3 = gb [["numbers" ]].transform ("sum" )
874874
875875 tm .assert_frame_equal (result_1 , result_3 )
876+
877+
878+ def test_groupby_resample_then_groupby_is_reused_when_groupby_selection_is_not_none ():
879+ # GH 59350
880+ df = DataFrame (
881+ data = {
882+ "datetime" : [
883+ pd .to_datetime ("2024-07-30T00:00Z" ),
884+ pd .to_datetime ("2024-07-30T00:01Z" ),
885+ ],
886+ "group" : ["A" , "A" ],
887+ "numbers" : [100 , 200 ],
888+ },
889+ index = [1 , 0 ],
890+ )
891+
892+ gb = df .groupby ("group" )
893+ gb = gb [["numbers" , "datetime" ]] # gb._selection is ["numbers", "datetime"]
894+
895+ # use gb
896+ result_1 = gb .transform ("max" )
897+
898+ index = Index ([1 , 0 ])
899+ expected = DataFrame (
900+ {
901+ "numbers" : [200 , 200 ],
902+ "datetime" : [
903+ pd .to_datetime ("2024-07-30T00:01Z" ),
904+ pd .to_datetime ("2024-07-30T00:01Z" ),
905+ ],
906+ },
907+ index = index ,
908+ )
909+
910+ tm .assert_frame_equal (result_1 , expected )
911+
912+ # resample gb, unrelated to above
913+ rs = gb .resample ("1min" , on = "datetime" )
914+ result_2 = rs .aggregate ({"numbers" : "sum" }) # Enter the `except IndexError:` block
915+
916+ index = pd .MultiIndex .from_arrays (
917+ [
918+ ["A" , "A" ],
919+ [pd .to_datetime ("2024-07-30T00:00Z" ), pd .to_datetime ("2024-07-30T00:01Z" )],
920+ ],
921+ names = [
922+ "group" ,
923+ "datetime" ,
924+ ],
925+ )
926+ columns = pd .MultiIndex .from_arrays ([["numbers" ], ["numbers" ]])
927+ expected = DataFrame ([[100 ], [200 ]], index = index , columns = columns )
928+
929+ tm .assert_frame_equal (result_2 , expected )
930+
931+ # reuse gb, unrelated to above
932+ result_3 = gb .transform ("max" )
933+
934+ tm .assert_frame_equal (result_1 , result_3 )
0 commit comments