@@ -764,21 +764,21 @@ def test_resample_origin():
764
764
765
765
766
766
@pytest .mark .parametrize (
767
- "origin" ,
768
- ["invalid_value" , "epch" , "startday" , "startt" , "2000-30-30" , object ()],
767
+ "origin" , ["invalid_value" , "epch" , "startday" , "startt" , "2000-30-30" , object ()],
769
768
)
770
769
def test_resample_bad_origin (origin ):
771
770
rng = date_range ("2000-01-01 00:00:00" , "2000-01-01 02:00" , freq = "s" )
772
771
ts = Series (np .random .randn (len (rng )), index = rng )
773
- msg = ("'origin' should be equal to 'epoch', 'start', 'start_day' or "
774
- f"should be a Timestamp convertible type. Got '{ origin } ' instead." )
772
+ msg = (
773
+ "'origin' should be equal to 'epoch', 'start', 'start_day' or "
774
+ f"should be a Timestamp convertible type. Got '{ origin } ' instead."
775
+ )
775
776
with pytest .raises (ValueError , match = msg ):
776
777
ts .resample ("5min" , origin = origin )
777
778
778
779
779
780
@pytest .mark .parametrize (
780
- "offset" ,
781
- ["invalid_value" , "12dayys" , "2000-30-30" , object ()],
781
+ "offset" , ["invalid_value" , "12dayys" , "2000-30-30" , object ()],
782
782
)
783
783
def test_resample_bad_offset (offset ):
784
784
rng = date_range ("2000-01-01 00:00:00" , "2000-01-01 02:00" , freq = "s" )
@@ -846,6 +846,61 @@ def test_resample_origin_with_tz():
846
846
ts .resample ("5min" , origin = "12/31/1999 23:57:00+03:00" ).mean ()
847
847
848
848
849
+ def test_resample_origin_with_day_freq_on_dst ():
850
+ # GH 31809
851
+ tz = "dateutil//usr/share/zoneinfo/America/Chicago"
852
+
853
+ def _create_series (values , timestamps , freq = "D" ):
854
+ return pd .Series (
855
+ values ,
856
+ index = pd .DatetimeIndex (
857
+ [Timestamp (t , tz = tz ) for t in timestamps ], freq = freq , ambiguous = True
858
+ ),
859
+ )
860
+
861
+ # test classical behavior of origin in a DST context
862
+ start = pd .Timestamp ("2013-11-02" , tz = tz )
863
+ end = pd .Timestamp ("2013-11-03 23:59" , tz = tz )
864
+ rng = pd .date_range (start , end , freq = "1h" )
865
+ ts = pd .Series (np .ones (len (rng )), index = rng )
866
+
867
+ expected = _create_series ([24.0 , 25.0 ], ["2013-11-02" , "2013-11-03" ])
868
+ for origin in ["epoch" , "start" , "start_day" , start , None ]:
869
+ result = ts .resample ("D" , origin = origin ).sum ()
870
+ tm .assert_series_equal (result , expected )
871
+
872
+ # test complex behavior of origin/offset in a DST context
873
+ start = pd .Timestamp ("2013-11-03" , tz = tz )
874
+ end = pd .Timestamp ("2013-11-03 23:59" , tz = tz )
875
+ rng = pd .date_range (start , end , freq = "1h" )
876
+ ts = pd .Series (np .ones (len (rng )), index = rng )
877
+
878
+ expected_ts = ["2013-11-02 22:00-05:00" , "2013-11-03 22:00-06:00" ]
879
+ expected = _create_series ([23.0 , 2.0 ], expected_ts )
880
+ result = ts .resample ("D" , origin = "start" , offset = "-2H" ).sum ()
881
+ tm .assert_series_equal (result , expected )
882
+
883
+ expected_ts = ["2013-11-02 22:00-05:00" , "2013-11-03 21:00-06:00" ]
884
+ expected = _create_series ([22.0 , 3.0 ], expected_ts , freq = "24H" )
885
+ result = ts .resample ("24H" , origin = "start" , offset = "-2H" ).sum ()
886
+ tm .assert_series_equal (result , expected )
887
+
888
+ expected_ts = ["2013-11-02 02:00-05:00" , "2013-11-03 02:00-06:00" ]
889
+ expected = _create_series ([3.0 , 22.0 ], expected_ts )
890
+ result = ts .resample ("D" , origin = "start" , offset = "2H" ).sum ()
891
+ tm .assert_series_equal (result , expected )
892
+
893
+ expected_ts = ["2013-11-02 23:00-05:00" , "2013-11-03 23:00-06:00" ]
894
+ expected = _create_series ([24.0 , 1.0 ], expected_ts )
895
+ result = ts .resample ("D" , origin = "start" , offset = "-1H" ).sum ()
896
+ tm .assert_series_equal (result , expected )
897
+
898
+ expected_ts = ["2013-11-02 01:00-05:00" , "2013-11-03 01:00:00-0500" ]
899
+ expected = _create_series ([1.0 , 24.0 ], expected_ts )
900
+ result = ts .resample ("D" , origin = "start" , offset = "1H" ).sum ()
901
+ tm .assert_series_equal (result , expected )
902
+
903
+
849
904
def test_resample_daily_anchored ():
850
905
rng = date_range ("1/1/2000 0:00:00" , periods = 10000 , freq = "T" )
851
906
ts = Series (np .random .randn (len (rng )), index = rng )
0 commit comments