1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
| import numpy as np
| import pytest
|
| from pandas import (
| Series,
| date_range,
| )
| import pandas._testing as tm
|
|
| class TestSeriesPctChange:
| def test_pct_change(self, datetime_series):
| rs = datetime_series.pct_change(fill_method=None)
| tm.assert_series_equal(rs, datetime_series / datetime_series.shift(1) - 1)
|
| rs = datetime_series.pct_change(2)
| filled = datetime_series.fillna(method="pad")
| tm.assert_series_equal(rs, filled / filled.shift(2) - 1)
|
| rs = datetime_series.pct_change(fill_method="bfill", limit=1)
| filled = datetime_series.fillna(method="bfill", limit=1)
| tm.assert_series_equal(rs, filled / filled.shift(1) - 1)
|
| rs = datetime_series.pct_change(freq="5D")
| filled = datetime_series.fillna(method="pad")
| tm.assert_series_equal(
| rs, (filled / filled.shift(freq="5D") - 1).reindex_like(filled)
| )
|
| def test_pct_change_with_duplicate_axis(self):
| # GH#28664
| common_idx = date_range("2019-11-14", periods=5, freq="D")
| result = Series(range(5), common_idx).pct_change(freq="B")
|
| # the reason that the expected should be like this is documented at PR 28681
| expected = Series([np.NaN, np.inf, np.NaN, np.NaN, 3.0], common_idx)
|
| tm.assert_series_equal(result, expected)
|
| def test_pct_change_shift_over_nas(self):
| s = Series([1.0, 1.5, np.nan, 2.5, 3.0])
|
| chg = s.pct_change()
| expected = Series([np.nan, 0.5, 0.0, 2.5 / 1.5 - 1, 0.2])
| tm.assert_series_equal(chg, expected)
|
| @pytest.mark.parametrize(
| "freq, periods, fill_method, limit",
| [
| ("5B", 5, None, None),
| ("3B", 3, None, None),
| ("3B", 3, "bfill", None),
| ("7B", 7, "pad", 1),
| ("7B", 7, "bfill", 3),
| ("14B", 14, None, None),
| ],
| )
| def test_pct_change_periods_freq(
| self, freq, periods, fill_method, limit, datetime_series
| ):
| # GH#7292
| rs_freq = datetime_series.pct_change(
| freq=freq, fill_method=fill_method, limit=limit
| )
| rs_periods = datetime_series.pct_change(
| periods, fill_method=fill_method, limit=limit
| )
| tm.assert_series_equal(rs_freq, rs_periods)
|
| empty_ts = Series(index=datetime_series.index, dtype=object)
| rs_freq = empty_ts.pct_change(freq=freq, fill_method=fill_method, limit=limit)
| rs_periods = empty_ts.pct_change(periods, fill_method=fill_method, limit=limit)
| tm.assert_series_equal(rs_freq, rs_periods)
|
|
| @pytest.mark.parametrize("fill_method", ["pad", "ffill", None])
| def test_pct_change_with_duplicated_indices(fill_method):
| # GH30463
| s = Series([np.nan, 1, 2, 3, 9, 18], index=["a", "b"] * 3)
| result = s.pct_change(fill_method=fill_method)
| expected = Series([np.nan, np.nan, 1.0, 0.5, 2.0, 1.0], index=["a", "b"] * 3)
| tm.assert_series_equal(result, expected)
|
|