Skip to content

Commit 261264c

Browse files
committed
edit set_levels docstring with additional examples
1 parent e8256cc commit 261264c

File tree

2 files changed

+35
-40
lines changed

2 files changed

+35
-40
lines changed

doc/source/user_guide/advanced.rst

-31
Original file line numberDiff line numberDiff line change
@@ -177,37 +177,6 @@ completely analogous way to selecting a column in a regular DataFrame:
177177
See :ref:`Cross-section with hierarchical index <advanced.xs>` for how to select
178178
on a deeper level.
179179

180-
.. _advanced.set_levels:
181-
182-
Set values in levels
183-
~~~~~~~~~~~~~~~~~~~~~
184-
185-
The method :meth:`~MultiIndex.set_levels` changes the ``levels`` attribute by
186-
passing a new value for each index in the level. It is assumed that a new value
187-
is provided for each code describing values in the level.
188-
For example:
189-
190-
.. ipython:: python
191-
192-
df.columns # original MultiIndex columns
193-
194-
df.columns.levels # original MultiIndex column levels
195-
196-
df.columns.set_levels([1, 3, 5, 7], level=0)
197-
198-
df.columns.set_levels([1, 3, 5, 7], level=0).levels
199-
200-
If you pass more values than the number of index values in the level,
201-
``set_levels`` will still pass the values to the level. The passed values
202-
are stored in the MultiIndex ``FrozenList`` even though the index values
203-
may be truncated in the MultiIndex output from ``set_levels``.
204-
205-
.. ipython:: python
206-
207-
df.columns.set_levels([1, 3, 5, 7], level=1)
208-
209-
df.columns.set_levels([1, 3, 5, 7], level=1).levels
210-
211180
.. _advanced.shown_levels:
212181

213182
Defined levels

pandas/core/indexes/multi.py

+35-9
Original file line numberDiff line numberDiff line change
@@ -719,8 +719,15 @@ def _set_levels(
719719

720720
def set_levels(self, levels, level=None, inplace=False, verify_integrity=True):
721721
"""
722-
Set new levels on MultiIndex. Defaults to returning
723-
new index.
722+
Sets/changes levels on MultiIndex by passing a new value for each
723+
index in the level. It is assumed that a new value is provided for
724+
each code describing values in the level. Defaults to returning new
725+
index.
726+
727+
If the number of values passed is more than number of index values in
728+
the level, ``set_levels`` will still pass the values to the level. The
729+
passed values are stored in the MultiIndex FrozenList even though the
730+
index values may be truncated in the MultiIndex output from set_levels.
724731
725732
Parameters
726733
----------
@@ -740,32 +747,51 @@ def set_levels(self, levels, level=None, inplace=False, verify_integrity=True):
740747
Examples
741748
--------
742749
>>> idx = pd.MultiIndex.from_tuples([(1, 'one'), (1, 'two'),
743-
(2, 'one'), (2, 'two')],
750+
(2, 'one'), (2, 'two'),
751+
(3, 'one'), (3, 'two')],
744752
names=['foo', 'bar'])
745-
>>> idx.set_levels([['a', 'b'], [1, 2]])
753+
>>> idx.set_levels([['a', 'b', 'c'], [1, 2]])
746754
MultiIndex([('a', 1),
747755
('a', 2),
748756
('b', 1),
749-
('b', 2)],
757+
('b', 2),
758+
('c', 1),
759+
('c', 2)],
750760
names=['foo', 'bar'])
751-
>>> idx.set_levels(['a', 'b'], level=0)
761+
>>> idx.set_levels(['a', 'b', 'c'], level=0)
752762
MultiIndex([('a', 'one'),
753763
('a', 'two'),
754764
('b', 'one'),
755-
('b', 'two')],
765+
('b', 'two'),
766+
('c', 'one'),
767+
('c', 'two')],
756768
names=['foo', 'bar'])
757769
>>> idx.set_levels(['a', 'b'], level='bar')
758770
MultiIndex([(1, 'a'),
759771
(1, 'b'),
760772
(2, 'a'),
761-
(2, 'b')],
773+
(2, 'b'),
774+
(3, 'a'),
775+
(3, 'b')],
776+
names=['foo', 'bar'])
777+
>>> idx.set_levels([['a', 'b', 'c'], [1, 2]], level=[0, 1])
778+
MultiIndex([('a', 1),
779+
('a', 2),
780+
('b', 1),
781+
('b', 2),
782+
('c', 1),
783+
('c', 2)],
762784
names=['foo', 'bar'])
763-
>>> idx.set_levels([['a', 'b'], [1, 2]], level=[0, 1])
785+
>>> idx.set_levels([['a', 'b', 'c'], [1, 2]], level=[0, 1]).levels
786+
FrozenList([['a', 'b', 'c'], [1, 2]])
787+
>>> idx.set_levels([['a', 'b', 'c'], [1, 2, 3, 4]], level=[0, 1])
764788
MultiIndex([('a', 1),
765789
('a', 2),
766790
('b', 1),
767791
('b', 2)],
768792
names=['foo', 'bar'])
793+
>>> idx.set_levels([['a', 'b', 'c'], [1, 2, 3, 4]], level=[0, 1]).levels
794+
FrozenList([['a', 'b', 'c'], [1, 2, 3, 4]])
769795
"""
770796
if is_list_like(levels) and not isinstance(levels, Index):
771797
levels = list(levels)

0 commit comments

Comments
 (0)