@@ -691,6 +691,38 @@ def test_groupby_resample_on_index_with_list_of_keys_missing_column():
691
691
rs [["val_not_in_dataframe" ]]
692
692
693
693
694
+ def test_groupby_resample_after_set_index_and_not_on_column ():
695
+ # GH 59350
696
+ df = DataFrame (
697
+ data = {
698
+ "datetime" : [
699
+ pd .to_datetime ("2024-07-30T00:00Z" ),
700
+ pd .to_datetime ("2024-07-30T00:01Z" ),
701
+ ],
702
+ "group" : ["A" , "A" ],
703
+ "numbers" : [100 , 200 ],
704
+ },
705
+ index = [1 , 0 ],
706
+ ).set_index ("datetime" )
707
+ gb = df .groupby ("group" )
708
+ rs = gb .resample ("1min" )
709
+ result = rs .aggregate ({"numbers" : "sum" })
710
+
711
+ index = pd .MultiIndex .from_arrays (
712
+ [
713
+ ["A" , "A" ],
714
+ [pd .to_datetime ("2024-07-30T00:00Z" ), pd .to_datetime ("2024-07-30T00:01Z" )],
715
+ ],
716
+ names = [
717
+ "group" ,
718
+ "datetime" ,
719
+ ],
720
+ )
721
+ expected = DataFrame ({"numbers" : [100 , 200 ]}, index = index )
722
+
723
+ tm .assert_frame_equal (result , expected )
724
+
725
+
694
726
@pytest .mark .parametrize (
695
727
"df" ,
696
728
[
@@ -746,3 +778,96 @@ def test_groupby_resample_on_column_when_index_is_unusual(df):
746
778
expected = DataFrame ({"numbers" : [100 , 200 ]}, index = index )
747
779
748
780
tm .assert_frame_equal (result , expected )
781
+
782
+
783
+ def test_groupby_resample_then_groupby_is_reused_when_index_is_out_of_order ():
784
+ df = DataFrame (
785
+ data = {
786
+ "datetime" : [
787
+ pd .to_datetime ("2024-07-30T00:00Z" ),
788
+ pd .to_datetime ("2024-07-30T00:01Z" ),
789
+ ],
790
+ "group" : ["A" , "A" ],
791
+ "numbers" : [100 , 200 ],
792
+ },
793
+ index = [1 , 0 ],
794
+ )
795
+
796
+ gb = df .groupby ("group" )
797
+
798
+ # use gb
799
+ result_1 = gb [["numbers" ]].transform ("sum" )
800
+
801
+ index = Index ([1 , 0 ])
802
+ expected = DataFrame ({"numbers" : [300 , 300 ]}, index = index )
803
+
804
+ tm .assert_frame_equal (result_1 , expected )
805
+
806
+ # resample gb, unrelated to above
807
+ rs = gb .resample ("1min" , on = "datetime" )
808
+ result_2 = rs .aggregate ({"numbers" : "sum" })
809
+
810
+ index = pd .MultiIndex .from_arrays (
811
+ [
812
+ ["A" , "A" ],
813
+ [pd .to_datetime ("2024-07-30T00:00Z" ), pd .to_datetime ("2024-07-30T00:01Z" )],
814
+ ],
815
+ names = [
816
+ "group" ,
817
+ "datetime" ,
818
+ ],
819
+ )
820
+ expected = DataFrame ({"numbers" : [100 , 200 ]}, index = index )
821
+
822
+ tm .assert_frame_equal (result_2 , expected )
823
+
824
+ # reuse gb, unrelated to above
825
+ result_3 = gb [["numbers" ]].transform ("sum" )
826
+
827
+ tm .assert_frame_equal (result_1 , result_3 )
828
+
829
+
830
+ def test_groupby_resample_then_groupby_is_reused_when_index_is_set_from_column ():
831
+ df = DataFrame (
832
+ data = {
833
+ "datetime" : [
834
+ pd .to_datetime ("2024-07-30T00:00Z" ),
835
+ pd .to_datetime ("2024-07-30T00:01Z" ),
836
+ ],
837
+ "group" : ["A" , "A" ],
838
+ "numbers" : [100 , 200 ],
839
+ },
840
+ ).set_index ("group" )
841
+
842
+ gb = df .groupby ("group" )
843
+
844
+ # use gb
845
+ result_1 = gb [["numbers" ]].transform ("sum" )
846
+
847
+ index = Index (["A" , "A" ], name = "group" )
848
+ expected = DataFrame ({"numbers" : [300 , 300 ]}, index = index )
849
+
850
+ tm .assert_frame_equal (result_1 , expected )
851
+
852
+ # resample gb, unrelated to above
853
+ rs = gb .resample ("1min" , on = "datetime" )
854
+ result_2 = rs .aggregate ({"numbers" : "sum" })
855
+
856
+ index = pd .MultiIndex .from_arrays (
857
+ [
858
+ ["A" , "A" ],
859
+ [pd .to_datetime ("2024-07-30T00:00Z" ), pd .to_datetime ("2024-07-30T00:01Z" )],
860
+ ],
861
+ names = [
862
+ "group" ,
863
+ "datetime" ,
864
+ ],
865
+ )
866
+ expected = DataFrame ({"numbers" : [100 , 200 ]}, index = index )
867
+
868
+ tm .assert_frame_equal (result_2 , expected )
869
+
870
+ # reuse gb, unrelated to above
871
+ result_3 = gb [["numbers" ]].transform ("sum" )
872
+
873
+ tm .assert_frame_equal (result_1 , result_3 )
0 commit comments