Skip to content

Commit 15b99d8

Browse files
authored
TST: share value_counts tests (#40132)
1 parent f4b67b5 commit 15b99d8

File tree

4 files changed

+103
-153
lines changed

4 files changed

+103
-153
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
import numpy as np
2+
3+
from pandas import (
4+
DatetimeIndex,
5+
NaT,
6+
PeriodIndex,
7+
Series,
8+
TimedeltaIndex,
9+
date_range,
10+
period_range,
11+
timedelta_range,
12+
)
13+
import pandas._testing as tm
14+
15+
16+
class TestValueCounts:
17+
# GH#7735
18+
19+
def test_value_counts_unique_datetimeindex(self, tz_naive_fixture):
20+
tz = tz_naive_fixture
21+
orig = date_range("2011-01-01 09:00", freq="H", periods=10, tz=tz)
22+
self._check_value_counts_with_repeats(orig)
23+
24+
def test_value_counts_unique_timedeltaindex(self):
25+
orig = timedelta_range("1 days 09:00:00", freq="H", periods=10)
26+
self._check_value_counts_with_repeats(orig)
27+
28+
def test_value_counts_unique_periodindex(self):
29+
orig = period_range("2011-01-01 09:00", freq="H", periods=10)
30+
self._check_value_counts_with_repeats(orig)
31+
32+
def _check_value_counts_with_repeats(self, orig):
33+
# create repeated values, 'n'th element is repeated by n+1 times
34+
idx = type(orig)(
35+
np.repeat(orig._values, range(1, len(orig) + 1)), dtype=orig.dtype
36+
)
37+
38+
exp_idx = orig[::-1]
39+
if not isinstance(exp_idx, PeriodIndex):
40+
exp_idx = exp_idx._with_freq(None)
41+
expected = Series(range(10, 0, -1), index=exp_idx, dtype="int64")
42+
43+
for obj in [idx, Series(idx)]:
44+
tm.assert_series_equal(obj.value_counts(), expected)
45+
46+
tm.assert_index_equal(idx.unique(), orig)
47+
48+
def test_value_counts_unique_datetimeindex2(self, tz_naive_fixture):
49+
tz = tz_naive_fixture
50+
idx = DatetimeIndex(
51+
[
52+
"2013-01-01 09:00",
53+
"2013-01-01 09:00",
54+
"2013-01-01 09:00",
55+
"2013-01-01 08:00",
56+
"2013-01-01 08:00",
57+
NaT,
58+
],
59+
tz=tz,
60+
)
61+
self._check_value_counts_dropna(idx)
62+
63+
def test_value_counts_unique_timedeltaindex2(self):
64+
idx = TimedeltaIndex(
65+
[
66+
"1 days 09:00:00",
67+
"1 days 09:00:00",
68+
"1 days 09:00:00",
69+
"1 days 08:00:00",
70+
"1 days 08:00:00",
71+
NaT,
72+
]
73+
)
74+
self._check_value_counts_dropna(idx)
75+
76+
def test_value_counts_unique_periodindex2(self):
77+
idx = PeriodIndex(
78+
[
79+
"2013-01-01 09:00",
80+
"2013-01-01 09:00",
81+
"2013-01-01 09:00",
82+
"2013-01-01 08:00",
83+
"2013-01-01 08:00",
84+
NaT,
85+
],
86+
freq="H",
87+
)
88+
self._check_value_counts_dropna(idx)
89+
90+
def _check_value_counts_dropna(self, idx):
91+
exp_idx = idx[[2, 3]]
92+
expected = Series([3, 2], index=exp_idx)
93+
94+
for obj in [idx, Series(idx)]:
95+
tm.assert_series_equal(obj.value_counts(), expected)
96+
97+
exp_idx = idx[[2, 3, -1]]
98+
expected = Series([3, 2, 1], index=exp_idx)
99+
100+
for obj in [idx, Series(idx)]:
101+
tm.assert_series_equal(obj.value_counts(dropna=False), expected)
102+
103+
tm.assert_index_equal(idx.unique(), exp_idx)

pandas/tests/indexes/datetimes/test_ops.py

-47
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
from datetime import datetime
22

33
from dateutil.tz import tzlocal
4-
import numpy as np
54
import pytest
65

76
from pandas.compat import IS64
87

9-
import pandas as pd
108
from pandas import (
119
DateOffset,
1210
DatetimeIndex,
@@ -69,51 +67,6 @@ def test_resolution(self, request, tz_naive_fixture, freq, expected):
6967
idx = date_range(start="2013-04-01", periods=30, freq=freq, tz=tz)
7068
assert idx.resolution == expected
7169

72-
def test_value_counts_unique(self, tz_naive_fixture):
73-
tz = tz_naive_fixture
74-
# GH 7735
75-
idx = date_range("2011-01-01 09:00", freq="H", periods=10)
76-
# create repeated values, 'n'th element is repeated by n+1 times
77-
idx = DatetimeIndex(np.repeat(idx.values, range(1, len(idx) + 1)), tz=tz)
78-
79-
exp_idx = date_range("2011-01-01 18:00", freq="-1H", periods=10, tz=tz)
80-
expected = Series(range(10, 0, -1), index=exp_idx, dtype="int64")
81-
expected.index = expected.index._with_freq(None)
82-
83-
for obj in [idx, Series(idx)]:
84-
85-
tm.assert_series_equal(obj.value_counts(), expected)
86-
87-
expected = date_range("2011-01-01 09:00", freq="H", periods=10, tz=tz)
88-
expected = expected._with_freq(None)
89-
tm.assert_index_equal(idx.unique(), expected)
90-
91-
idx = DatetimeIndex(
92-
[
93-
"2013-01-01 09:00",
94-
"2013-01-01 09:00",
95-
"2013-01-01 09:00",
96-
"2013-01-01 08:00",
97-
"2013-01-01 08:00",
98-
pd.NaT,
99-
],
100-
tz=tz,
101-
)
102-
103-
exp_idx = DatetimeIndex(["2013-01-01 09:00", "2013-01-01 08:00"], tz=tz)
104-
expected = Series([3, 2], index=exp_idx)
105-
106-
for obj in [idx, Series(idx)]:
107-
tm.assert_series_equal(obj.value_counts(), expected)
108-
109-
exp_idx = DatetimeIndex(["2013-01-01 09:00", "2013-01-01 08:00", pd.NaT], tz=tz)
110-
expected = Series([3, 2, 1], index=exp_idx)
111-
112-
for obj in [idx, Series(idx)]:
113-
tm.assert_series_equal(obj.value_counts(dropna=False), expected)
114-
115-
tm.assert_index_equal(idx.unique(), exp_idx)
116-
11770
def test_infer_freq(self, freq_sample):
11871
# GH 11018
11972
idx = date_range("2011-01-01 09:00:00", freq=freq_sample, periods=10)

pandas/tests/indexes/period/test_ops.py

-61
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,6 @@
1-
import numpy as np
21
import pytest
32

43
import pandas as pd
5-
from pandas import (
6-
NaT,
7-
PeriodIndex,
8-
Series,
9-
)
104
import pandas._testing as tm
115

126

@@ -29,61 +23,6 @@ def test_resolution(self, freq, expected):
2923
idx = pd.period_range(start="2013-04-01", periods=30, freq=freq)
3024
assert idx.resolution == expected
3125

32-
def test_value_counts_unique(self):
33-
# GH 7735
34-
idx = pd.period_range("2011-01-01 09:00", freq="H", periods=10)
35-
# create repeated values, 'n'th element is repeated by n+1 times
36-
idx = PeriodIndex(np.repeat(idx._values, range(1, len(idx) + 1)), freq="H")
37-
38-
exp_idx = PeriodIndex(
39-
[
40-
"2011-01-01 18:00",
41-
"2011-01-01 17:00",
42-
"2011-01-01 16:00",
43-
"2011-01-01 15:00",
44-
"2011-01-01 14:00",
45-
"2011-01-01 13:00",
46-
"2011-01-01 12:00",
47-
"2011-01-01 11:00",
48-
"2011-01-01 10:00",
49-
"2011-01-01 09:00",
50-
],
51-
freq="H",
52-
)
53-
expected = Series(range(10, 0, -1), index=exp_idx, dtype="int64")
54-
55-
for obj in [idx, Series(idx)]:
56-
tm.assert_series_equal(obj.value_counts(), expected)
57-
58-
expected = pd.period_range("2011-01-01 09:00", freq="H", periods=10)
59-
tm.assert_index_equal(idx.unique(), expected)
60-
61-
idx = PeriodIndex(
62-
[
63-
"2013-01-01 09:00",
64-
"2013-01-01 09:00",
65-
"2013-01-01 09:00",
66-
"2013-01-01 08:00",
67-
"2013-01-01 08:00",
68-
NaT,
69-
],
70-
freq="H",
71-
)
72-
73-
exp_idx = PeriodIndex(["2013-01-01 09:00", "2013-01-01 08:00"], freq="H")
74-
expected = Series([3, 2], index=exp_idx)
75-
76-
for obj in [idx, Series(idx)]:
77-
tm.assert_series_equal(obj.value_counts(), expected)
78-
79-
exp_idx = PeriodIndex(["2013-01-01 09:00", "2013-01-01 08:00", NaT], freq="H")
80-
expected = Series([3, 2, 1], index=exp_idx)
81-
82-
for obj in [idx, Series(idx)]:
83-
tm.assert_series_equal(obj.value_counts(dropna=False), expected)
84-
85-
tm.assert_index_equal(idx.unique(), exp_idx)
86-
8726
def test_freq_setter_deprecated(self):
8827
# GH 20678
8928
idx = pd.period_range("2018Q1", periods=4, freq="Q")

pandas/tests/indexes/timedeltas/test_ops.py

-45
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
import pytest
33

44
from pandas import (
5-
NaT,
65
Series,
76
TimedeltaIndex,
87
timedelta_range,
@@ -17,50 +16,6 @@
1716

1817

1918
class TestTimedeltaIndexOps:
20-
def test_value_counts_unique(self):
21-
# GH 7735
22-
idx = timedelta_range("1 days 09:00:00", freq="H", periods=10)
23-
# create repeated values, 'n'th element is repeated by n+1 times
24-
idx = TimedeltaIndex(np.repeat(idx.values, range(1, len(idx) + 1)))
25-
26-
exp_idx = timedelta_range("1 days 18:00:00", freq="-1H", periods=10)
27-
exp_idx = exp_idx._with_freq(None)
28-
expected = Series(range(10, 0, -1), index=exp_idx, dtype="int64")
29-
30-
obj = idx
31-
tm.assert_series_equal(obj.value_counts(), expected)
32-
33-
obj = Series(idx)
34-
tm.assert_series_equal(obj.value_counts(), expected)
35-
36-
expected = timedelta_range("1 days 09:00:00", freq="H", periods=10)
37-
tm.assert_index_equal(idx.unique(), expected)
38-
39-
idx = TimedeltaIndex(
40-
[
41-
"1 days 09:00:00",
42-
"1 days 09:00:00",
43-
"1 days 09:00:00",
44-
"1 days 08:00:00",
45-
"1 days 08:00:00",
46-
NaT,
47-
]
48-
)
49-
50-
exp_idx = TimedeltaIndex(["1 days 09:00:00", "1 days 08:00:00"])
51-
expected = Series([3, 2], index=exp_idx)
52-
53-
for obj in [idx, Series(idx)]:
54-
tm.assert_series_equal(obj.value_counts(), expected)
55-
56-
exp_idx = TimedeltaIndex(["1 days 09:00:00", "1 days 08:00:00", NaT])
57-
expected = Series([3, 2, 1], index=exp_idx)
58-
59-
for obj in [idx, Series(idx)]:
60-
tm.assert_series_equal(obj.value_counts(dropna=False), expected)
61-
62-
tm.assert_index_equal(idx.unique(), exp_idx)
63-
6419
def test_nonunique_contains(self):
6520
# GH 9512
6621
for idx in map(

0 commit comments

Comments
 (0)