File tree 3 files changed +9
-2
lines changed
3 files changed +9
-2
lines changed Original file line number Diff line number Diff line change @@ -617,6 +617,7 @@ MultiIndex
617
617
- Bug in :meth: `MultiIndex.union ` not sorting when sort=None and index contains missing values (:issue: `49010 `)
618
618
- Bug in :meth: `MultiIndex.append ` not checking names for equality (:issue: `48288 `)
619
619
- Bug in :meth: `MultiIndex.symmetric_difference ` losing extension array (:issue: `48607 `)
620
+ - Bug in :meth: `MultiIndex.value_counts ` returning a :class: `Series ` indexed by flat index of tuples instead of a :class: `MultiIndex ` (:issue: `49558 `)
620
621
-
621
622
622
623
I/O
Original file line number Diff line number Diff line change @@ -871,6 +871,14 @@ def value_counts(
871
871
result .name = name
872
872
counts = result ._values
873
873
874
+ elif isinstance (values , ABCMultiIndex ):
875
+ # GH49558
876
+ levels = list (range (values .nlevels ))
877
+ result = Series (index = values ).groupby (level = levels , dropna = dropna ).size ()
878
+ # TODO: allow index names to remain (see discussion in GH49497)
879
+ result .index .names = [None ] * values .nlevels
880
+ counts = result ._values
881
+
874
882
else :
875
883
values = _ensure_arraylike (values )
876
884
keys , counts = value_counts_arraylike (values , dropna )
Original file line number Diff line number Diff line change @@ -29,8 +29,6 @@ def test_value_counts(index_or_series_obj):
29
29
counter = collections .Counter (obj )
30
30
expected = Series (dict (counter .most_common ()), dtype = np .int64 , name = obj .name )
31
31
expected .index = expected .index .astype (obj .dtype )
32
- if isinstance (obj , pd .MultiIndex ):
33
- expected .index = Index (expected .index )
34
32
35
33
if not isinstance (result .dtype , np .dtype ):
36
34
# i.e IntegerDtype
You can’t perform that action at this time.
0 commit comments