Skip to content

Commit 9093374

Browse files
committed
redo using private methods
1 parent db2f38a commit 9093374

File tree

3 files changed

+44
-25
lines changed

3 files changed

+44
-25
lines changed

pandas/core/frame.py

+15-1
Original file line numberDiff line numberDiff line change
@@ -5776,6 +5776,20 @@ class max type
57765776
lion mammal 80.5 run
57775777
monkey mammal NaN jump
57785778
"""
5779+
return self._reset_index(level, drop, inplace, col_level, col_fill)
5780+
5781+
def _reset_index(
5782+
self,
5783+
level: Hashable | Sequence[Hashable] | None = None,
5784+
drop: bool = False,
5785+
inplace: bool = False,
5786+
col_level: Hashable = 0,
5787+
col_fill: Hashable = "",
5788+
allow_duplicates: bool = False,
5789+
) -> DataFrame | None:
5790+
"""
5791+
Private version of reset_index with additional allow_duplicates parameter
5792+
"""
57795793
inplace = validate_bool_kwarg(inplace, "inplace")
57805794
self._check_inplace_and_allows_duplicate_labels(inplace)
57815795
if inplace:
@@ -5833,7 +5847,7 @@ class max type
58335847
level_values, lab, allow_fill=True, fill_value=lev._na_value
58345848
)
58355849

5836-
new_obj.insert(0, name, level_values)
5850+
new_obj.insert(0, name, level_values, allow_duplicates=allow_duplicates)
58375851

58385852
new_obj.index = new_index
58395853
if not inplace:

pandas/core/groupby/generic.py

+11-23
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,7 @@
2626

2727
import numpy as np
2828

29-
from pandas._libs import (
30-
lib,
31-
reduction as libreduction,
32-
)
29+
from pandas._libs import reduction as libreduction
3330
from pandas._typing import (
3431
ArrayLike,
3532
Manager,
@@ -1734,7 +1731,7 @@ def value_counts(
17341731
observed=self.observed,
17351732
dropna=self.dropna,
17361733
)
1737-
result = gb.size()
1734+
result = cast(Series, gb.size())
17381735

17391736
if normalize:
17401737
# Normalize the results by dividing by the original group sizes.
@@ -1753,33 +1750,24 @@ def value_counts(
17531750
if sort:
17541751
# Sort the values and then resort by the main grouping
17551752
index_level = range(len(self.grouper.groupings))
1756-
result = (
1757-
cast(Series, result)
1758-
.sort_values(ascending=ascending)
1759-
.sort_index(level=index_level, sort_remaining=False)
1753+
result = result.sort_values(ascending=ascending).sort_index(
1754+
level=index_level, sort_remaining=False
17601755
)
17611756

1762-
if not self.as_index:
1757+
if self.as_index:
1758+
return result.__finalize__(self.obj, method="value_counts")
1759+
else:
17631760
# Convert to frame
17641761
name = "proportion" if normalize else "count"
17651762
columns = result.index.names
17661763
if name in columns:
17671764
raise ValueError(
17681765
f"Column label '{name}' is duplicate of result column"
17691766
)
1770-
columns = com.fill_missing_names(columns)
1771-
values = result.values
1772-
result_frame = DataFrame()
1773-
for i, column in enumerate(columns):
1774-
level_values = result.index.get_level_values(i)._values
1775-
if level_values.dtype == np.object_:
1776-
level_values = lib.maybe_convert_objects(
1777-
cast(np.ndarray, level_values)
1778-
)
1779-
result_frame.insert(i, column, level_values, allow_duplicates=True)
1780-
result = result_frame.assign(**{name: values})
1781-
1782-
return result.__finalize__(self.obj, method="value_counts")
1767+
result_frame = cast(
1768+
DataFrame, result._reset_index(name=name, allow_duplicates=True)
1769+
)
1770+
return result_frame.__finalize__(self.obj, method="value_counts")
17831771

17841772

17851773
def _wrap_transform_general_frame(

pandas/core/series.py

+18-1
Original file line numberDiff line numberDiff line change
@@ -1462,6 +1462,19 @@ def reset_index(self, level=None, drop=False, name=lib.no_default, inplace=False
14621462
2 baz one 2
14631463
3 baz two 3
14641464
"""
1465+
return self._reset_index(level, drop, name, inplace)
1466+
1467+
def _reset_index(
1468+
self,
1469+
level: Hashable | Sequence[Hashable] | None = None,
1470+
drop: bool = False,
1471+
name: Hashable | lib.NoDefault = lib.no_default,
1472+
inplace: bool = False,
1473+
allow_duplicates: bool = False,
1474+
) -> Series | DataFrame | None:
1475+
"""
1476+
Private version of reset_index with additional allow_duplicates parameter
1477+
"""
14651478
inplace = validate_bool_kwarg(inplace, "inplace")
14661479
if drop:
14671480
new_index = default_index(len(self))
@@ -1492,7 +1505,11 @@ def reset_index(self, level=None, drop=False, name=lib.no_default, inplace=False
14921505
name = self.name
14931506

14941507
df = self.to_frame(name)
1495-
return df.reset_index(level=level, drop=drop)
1508+
return df._reset_index(
1509+
level=level, drop=drop, allow_duplicates=allow_duplicates
1510+
)
1511+
1512+
return None
14961513

14971514
# ----------------------------------------------------------------------
14981515
# Rendering Methods

0 commit comments

Comments
 (0)