test_cumulative.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. """
  2. Tests for DataFrame cumulative operations
  3. See also
  4. --------
  5. tests.series.test_cumulative
  6. """
  7. import numpy as np
  8. import pytest
  9. from pandas import DataFrame, Series, _is_numpy_dev
  10. import pandas._testing as tm
  11. class TestDataFrameCumulativeOps:
  12. # ---------------------------------------------------------------------
  13. # Cumulative Operations - cumsum, cummax, ...
  14. def test_cumsum_corner(self):
  15. dm = DataFrame(np.arange(20).reshape(4, 5), index=range(4), columns=range(5))
  16. # TODO(wesm): do something with this?
  17. result = dm.cumsum() # noqa
  18. def test_cumsum(self, datetime_frame):
  19. datetime_frame.loc[5:10, 0] = np.nan
  20. datetime_frame.loc[10:15, 1] = np.nan
  21. datetime_frame.loc[15:, 2] = np.nan
  22. # axis = 0
  23. cumsum = datetime_frame.cumsum()
  24. expected = datetime_frame.apply(Series.cumsum)
  25. tm.assert_frame_equal(cumsum, expected)
  26. # axis = 1
  27. cumsum = datetime_frame.cumsum(axis=1)
  28. expected = datetime_frame.apply(Series.cumsum, axis=1)
  29. tm.assert_frame_equal(cumsum, expected)
  30. # works
  31. df = DataFrame({"A": np.arange(20)}, index=np.arange(20))
  32. df.cumsum()
  33. # fix issue
  34. cumsum_xs = datetime_frame.cumsum(axis=1)
  35. assert np.shape(cumsum_xs) == np.shape(datetime_frame)
  36. def test_cumprod(self, datetime_frame):
  37. datetime_frame.loc[5:10, 0] = np.nan
  38. datetime_frame.loc[10:15, 1] = np.nan
  39. datetime_frame.loc[15:, 2] = np.nan
  40. # axis = 0
  41. cumprod = datetime_frame.cumprod()
  42. expected = datetime_frame.apply(Series.cumprod)
  43. tm.assert_frame_equal(cumprod, expected)
  44. # axis = 1
  45. cumprod = datetime_frame.cumprod(axis=1)
  46. expected = datetime_frame.apply(Series.cumprod, axis=1)
  47. tm.assert_frame_equal(cumprod, expected)
  48. # fix issue
  49. cumprod_xs = datetime_frame.cumprod(axis=1)
  50. assert np.shape(cumprod_xs) == np.shape(datetime_frame)
  51. # ints
  52. df = datetime_frame.fillna(0).astype(int)
  53. df.cumprod(0)
  54. df.cumprod(1)
  55. # ints32
  56. df = datetime_frame.fillna(0).astype(np.int32)
  57. df.cumprod(0)
  58. df.cumprod(1)
  59. @pytest.mark.xfail(
  60. _is_numpy_dev,
  61. reason="https://github.com/pandas-dev/pandas/issues/31992",
  62. strict=False,
  63. )
  64. def test_cummin(self, datetime_frame):
  65. datetime_frame.loc[5:10, 0] = np.nan
  66. datetime_frame.loc[10:15, 1] = np.nan
  67. datetime_frame.loc[15:, 2] = np.nan
  68. # axis = 0
  69. cummin = datetime_frame.cummin()
  70. expected = datetime_frame.apply(Series.cummin)
  71. tm.assert_frame_equal(cummin, expected)
  72. # axis = 1
  73. cummin = datetime_frame.cummin(axis=1)
  74. expected = datetime_frame.apply(Series.cummin, axis=1)
  75. tm.assert_frame_equal(cummin, expected)
  76. # it works
  77. df = DataFrame({"A": np.arange(20)}, index=np.arange(20))
  78. df.cummin()
  79. # fix issue
  80. cummin_xs = datetime_frame.cummin(axis=1)
  81. assert np.shape(cummin_xs) == np.shape(datetime_frame)
  82. @pytest.mark.xfail(
  83. _is_numpy_dev,
  84. reason="https://github.com/pandas-dev/pandas/issues/31992",
  85. strict=False,
  86. )
  87. def test_cummax(self, datetime_frame):
  88. datetime_frame.loc[5:10, 0] = np.nan
  89. datetime_frame.loc[10:15, 1] = np.nan
  90. datetime_frame.loc[15:, 2] = np.nan
  91. # axis = 0
  92. cummax = datetime_frame.cummax()
  93. expected = datetime_frame.apply(Series.cummax)
  94. tm.assert_frame_equal(cummax, expected)
  95. # axis = 1
  96. cummax = datetime_frame.cummax(axis=1)
  97. expected = datetime_frame.apply(Series.cummax, axis=1)
  98. tm.assert_frame_equal(cummax, expected)
  99. # it works
  100. df = DataFrame({"A": np.arange(20)}, index=np.arange(20))
  101. df.cummax()
  102. # fix issue
  103. cummax_xs = datetime_frame.cummax(axis=1)
  104. assert np.shape(cummax_xs) == np.shape(datetime_frame)
  105. def test_cumulative_ops_preserve_dtypes(self):
  106. # GH#19296 dont incorrectly upcast to object
  107. df = DataFrame({"A": [1, 2, 3], "B": [1, 2, 3.0], "C": [True, False, False]})
  108. result = df.cumsum()
  109. expected = DataFrame(
  110. {
  111. "A": Series([1, 3, 6], dtype=np.int64),
  112. "B": Series([1, 3, 6], dtype=np.float64),
  113. "C": df["C"].cumsum(),
  114. }
  115. )
  116. tm.assert_frame_equal(result, expected)