Skip to content

Commit 85630e8

Browse files
committed
test optimize
1 parent 409f8bb commit 85630e8

File tree

2 files changed

+53
-70
lines changed

2 files changed

+53
-70
lines changed

pandas/core/algorithms.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -941,12 +941,10 @@ def value_counts_internal(
941941
bins is None
942942
and not sort
943943
and isinstance(values, (DatetimeIndex, TimedeltaIndex))
944-
and values.inferred_freq is not None
945-
and len(idx) == len(values)
946944
and idx.equals(values)
945+
and values.inferred_freq is not None
947946
):
948-
# freq preservation
949-
# Rebuild idx with the correct type and inferred frequency
947+
# Preserve freq of original index
950948
idx.freq = values.inferred_freq # type: ignore[attr-defined]
951949

952950
result = Series(counts, index=idx, name=name, copy=False)

pandas/tests/base/test_value_counts.py

Lines changed: 51 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -342,78 +342,63 @@ def test_value_counts_object_inference_deprecated():
342342

343343

344344
@pytest.mark.parametrize(
345-
"index",
345+
("index", "expected_index"),
346346
[
347-
pd.date_range("2016-01-01", periods=5, freq="D"),
348-
pd.timedelta_range(Timedelta(0), periods=5, freq="h"),
349-
],
350-
ids=["DatetimeIndex[D]", "TimedeltaIndex[h]"],
351-
)
352-
@pytest.mark.parametrize(
353-
"build,kwargs,exp_preserve,exp_hasnans,exp_index_fn",
354-
[
355-
(lambda idx: idx, {"sort": False}, True, False, lambda idx, obj: idx),
356-
(
357-
lambda idx: idx,
358-
{"sort": False, "normalize": True},
359-
True,
360-
False,
361-
lambda idx, obj: idx,
347+
pytest.param(
348+
pd.date_range("2016-01-01", periods=5, freq="D"),
349+
pd.date_range("2016-01-01", periods=5, freq="D"),
350+
),
351+
pytest.param(
352+
pd.timedelta_range(Timedelta(0), periods=5, freq="h"),
353+
pd.timedelta_range(Timedelta(0), periods=5, freq="h"),
354+
),
355+
pytest.param(
356+
pd.date_range("2016-01-01", periods=5, freq="D").insert(
357+
1, pd.date_range("2016-01-01", periods=5, freq="D")[1]
358+
),
359+
DatetimeIndex(pd.date_range("2016-01-01", periods=5, freq="D"), freq=None),
360+
),
361+
pytest.param(
362+
pd.timedelta_range(Timedelta(0), periods=5, freq="h").insert(
363+
1, pd.timedelta_range(Timedelta(0), periods=5, freq="h")[1]
364+
),
365+
TimedeltaIndex(
366+
pd.timedelta_range(Timedelta(0), periods=5, freq="h"), freq=None
367+
),
362368
),
363-
(lambda idx: idx, {}, False, False, None),
364-
(
365-
lambda idx: idx.insert(1, idx[1]),
366-
{"sort": False},
367-
False,
368-
False,
369-
lambda idx, obj: type(idx)(idx, freq=None),
369+
pytest.param(
370+
pd.date_range("2016-01-01", periods=5, freq="D").delete(2),
371+
DatetimeIndex(
372+
pd.date_range("2016-01-01", periods=5, freq="D").delete(2), freq=None
373+
),
370374
),
371-
(
372-
lambda idx: idx.delete(2),
373-
{"sort": False},
374-
False,
375-
False,
376-
lambda idx, obj: type(idx)(obj, freq=None),
375+
pytest.param(
376+
pd.timedelta_range(Timedelta(0), periods=5, freq="h").delete(2),
377+
TimedeltaIndex(
378+
pd.timedelta_range(Timedelta(0), periods=5, freq="h").delete(2),
379+
freq=None,
380+
),
377381
),
378-
(
379-
lambda idx: idx.insert(1, pd.NaT),
380-
{"sort": False, "dropna": False},
381-
False,
382-
True,
383-
lambda idx, obj: type(idx)(
384-
list(idx[:1]) + [pd.NaT] + list(idx[1:]), freq=None
382+
pytest.param(
383+
pd.date_range("2016-01-01", periods=5, freq="D").insert(1, pd.NaT),
384+
DatetimeIndex(
385+
list(pd.date_range("2016-01-01", periods=5, freq="D")[:1])
386+
+ [pd.NaT]
387+
+ list(pd.date_range("2016-01-01", periods=5, freq="D")[1:]),
388+
freq=None,
385389
),
386390
),
387-
(
388-
lambda idx: idx.insert(1, pd.NaT),
389-
{"sort": False, "dropna": True},
390-
False,
391-
False,
392-
lambda idx, obj: type(idx)(idx, freq=None),
391+
pytest.param(
392+
pd.timedelta_range(Timedelta(0), periods=5, freq="h").insert(1, pd.NaT),
393+
TimedeltaIndex(
394+
list(pd.timedelta_range(Timedelta(0), periods=5, freq="h")[:1])
395+
+ [pd.NaT]
396+
+ list(pd.timedelta_range(Timedelta(0), periods=5, freq="h")[1:]),
397+
freq=None,
398+
),
393399
),
394400
],
395401
)
396-
def test_value_counts_freq_datetimelike(
397-
index, build, kwargs, exp_preserve, exp_hasnans, exp_index_fn
398-
):
399-
obj = build(index)
400-
vc = obj.value_counts(**kwargs)
401-
402-
# without sort
403-
if exp_index_fn is not None:
404-
expected_idx = exp_index_fn(index, obj)
405-
tm.assert_index_equal(vc.index, expected_idx)
406-
407-
# freq preservation / drop
408-
if exp_preserve:
409-
assert vc.index.freq == index.freq
410-
else:
411-
assert vc.index.freq is None
412-
413-
# NaT presence
414-
assert vc.index.hasnans is exp_hasnans
415-
416-
# without normalize
417-
if kwargs.get("normalize", False):
418-
expected_val = 1.0 / len(index)
419-
assert np.isclose(vc.to_numpy(), expected_val).all()
402+
def test_value_counts_index_datetimelike(index, expected_index):
403+
vc = index.value_counts(sort=False, dropna=False)
404+
tm.assert_index_equal(vc.index, expected_index)

0 commit comments

Comments
 (0)