test_shift.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import pytest
  2. from pandas.errors import NullFrequencyError
  3. import pandas as pd
  4. from pandas import TimedeltaIndex
  5. import pandas._testing as tm
  6. class TestTimedeltaIndexShift:
  7. # -------------------------------------------------------------
  8. # TimedeltaIndex.shift is used by __add__/__sub__
  9. def test_tdi_shift_empty(self):
  10. # GH#9903
  11. idx = pd.TimedeltaIndex([], name="xxx")
  12. tm.assert_index_equal(idx.shift(0, freq="H"), idx)
  13. tm.assert_index_equal(idx.shift(3, freq="H"), idx)
  14. def test_tdi_shift_hours(self):
  15. # GH#9903
  16. idx = pd.TimedeltaIndex(["5 hours", "6 hours", "9 hours"], name="xxx")
  17. tm.assert_index_equal(idx.shift(0, freq="H"), idx)
  18. exp = pd.TimedeltaIndex(["8 hours", "9 hours", "12 hours"], name="xxx")
  19. tm.assert_index_equal(idx.shift(3, freq="H"), exp)
  20. exp = pd.TimedeltaIndex(["2 hours", "3 hours", "6 hours"], name="xxx")
  21. tm.assert_index_equal(idx.shift(-3, freq="H"), exp)
  22. def test_tdi_shift_minutes(self):
  23. # GH#9903
  24. idx = pd.TimedeltaIndex(["5 hours", "6 hours", "9 hours"], name="xxx")
  25. tm.assert_index_equal(idx.shift(0, freq="T"), idx)
  26. exp = pd.TimedeltaIndex(["05:03:00", "06:03:00", "9:03:00"], name="xxx")
  27. tm.assert_index_equal(idx.shift(3, freq="T"), exp)
  28. exp = pd.TimedeltaIndex(["04:57:00", "05:57:00", "8:57:00"], name="xxx")
  29. tm.assert_index_equal(idx.shift(-3, freq="T"), exp)
  30. def test_tdi_shift_int(self):
  31. # GH#8083
  32. trange = pd.to_timedelta(range(5), unit="d") + pd.offsets.Hour(1)
  33. result = trange.shift(1)
  34. expected = TimedeltaIndex(
  35. [
  36. "1 days 01:00:00",
  37. "2 days 01:00:00",
  38. "3 days 01:00:00",
  39. "4 days 01:00:00",
  40. "5 days 01:00:00",
  41. ],
  42. freq="D",
  43. )
  44. tm.assert_index_equal(result, expected)
  45. def test_tdi_shift_nonstandard_freq(self):
  46. # GH#8083
  47. trange = pd.to_timedelta(range(5), unit="d") + pd.offsets.Hour(1)
  48. result = trange.shift(3, freq="2D 1s")
  49. expected = TimedeltaIndex(
  50. [
  51. "6 days 01:00:03",
  52. "7 days 01:00:03",
  53. "8 days 01:00:03",
  54. "9 days 01:00:03",
  55. "10 days 01:00:03",
  56. ],
  57. freq="D",
  58. )
  59. tm.assert_index_equal(result, expected)
  60. def test_shift_no_freq(self):
  61. # GH#19147
  62. tdi = TimedeltaIndex(["1 days 01:00:00", "2 days 01:00:00"], freq=None)
  63. with pytest.raises(NullFrequencyError):
  64. tdi.shift(2)