Skip to content

Commit f973046

Browse files
committed
Update doc string examples and docs
1 parent 110085a commit f973046

File tree

2 files changed

+121
-35
lines changed

2 files changed

+121
-35
lines changed

doc/source/user_guide/advanced.rst

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -182,15 +182,15 @@ on a deeper level.
182182
Defined Levels
183183
~~~~~~~~~~~~~~
184184

185-
The repr of a ``MultiIndex`` shows all the defined levels of an index, even
185+
The ``MultiIndex`` keeps all the defined levels of an index, even
186186
if they are not actually used. When slicing an index, you may notice this.
187187
For example:
188188

189189
.. ipython:: python
190190
191-
  df.columns # original MultiIndex
191+
  df.columns.levels # original MultiIndex
192192
193-
df[['foo','qux']].columns # sliced
193+
df[['foo','qux']].columns.levels # sliced
194194
195195
This is done to avoid a recomputation of the levels in order to make slicing
196196
highly performant. If you want to see only the used levels, you can use the
@@ -210,7 +210,8 @@ To reconstruct the ``MultiIndex`` with only the used levels, the
210210

211211
.. ipython:: python
212212
213-
df[['foo', 'qux']].columns.remove_unused_levels()
213+
new_mi = df[['foo', 'qux']].columns.remove_unused_levels()
214+
new_mi.levels
214215
215216
Data alignment and using ``reindex``
216217
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

pandas/core/indexes/multi.py

Lines changed: 116 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -380,9 +380,11 @@ def from_tuples(cls, tuples, sortorder=None, names=None):
380380
>>> tuples = [(1, 'red'), (1, 'blue'),
381381
... (2, 'red'), (2, 'blue')]
382382
>>> pd.MultiIndex.from_tuples(tuples, names=('number', 'color'))
383-
MultiIndex(levels=[[1, 2], ['blue', 'red']],
384-
codes=[[0, 0, 1, 1], [1, 0, 1, 0]],
385-
names=['number', 'color'])
383+
MultiIndex([(1, 'red'),
384+
(1, 'blue'),
385+
(2, 'red'),
386+
(2, 'blue')],
387+
dtype='object', names=['number', 'color'])
386388
"""
387389
if not is_list_like(tuples):
388390
raise TypeError('Input must be a list / sequence of tuple-likes.')
@@ -437,9 +439,13 @@ def from_product(cls, iterables, sortorder=None, names=None):
437439
>>> colors = ['green', 'purple']
438440
>>> pd.MultiIndex.from_product([numbers, colors],
439441
... names=['number', 'color'])
440-
MultiIndex(levels=[[0, 1, 2], ['green', 'purple']],
441-
codes=[[0, 0, 1, 1, 2, 2], [0, 1, 0, 1, 0, 1]],
442-
names=['number', 'color'])
442+
MultiIndex([(0, 'green'),
443+
(0, 'purple'),
444+
(1, 'green'),
445+
(1, 'purple'),
446+
(2, 'green'),
447+
(2, 'purple')],
448+
dtype='object', names=['number', 'color'])
443449
"""
444450
from pandas.core.arrays.categorical import _factorize_from_iterables
445451
from pandas.core.reshape.util import cartesian_product
@@ -622,6 +628,7 @@ def set_levels(self, levels, level=None, inplace=False,
622628
>>> idx = pd.MultiIndex.from_tuples([(1, 'one'), (1, 'two'),
623629
(2, 'one'), (2, 'two')],
624630
names=['foo', 'bar'])
631+
<<<<<<< HEAD
625632
>>> idx.set_levels([['a','b'], [1,2]])
626633
MultiIndex(levels=[['a', 'b'], [1, 2]],
627634
codes=[[0, 0, 1, 1], [0, 1, 0, 1]],
@@ -638,6 +645,32 @@ def set_levels(self, levels, level=None, inplace=False,
638645
MultiIndex(levels=[['a', 'b'], [1, 2]],
639646
codes=[[0, 0, 1, 1], [0, 1, 0, 1]],
640647
names=['foo', 'bar'])
648+
=======
649+
>>> idx.set_levels([['a', 'b'], [1, 2]])
650+
MultiIndex([('a', 1),
651+
('a', 2),
652+
('b', 1),
653+
('b', 2)],
654+
dtype='object', names=['foo', 'bar'])
655+
>>> idx.set_levels(['a', 'b'], level=0)
656+
MultiIndex([('a', 'one'),
657+
('a', 'two'),
658+
('b', 'one'),
659+
('b', 'two')],
660+
dtype='object', names=['foo', 'bar'])
661+
>>> idx.set_levels(['a', 'b'], level='bar')
662+
MultiIndex([(1, 'a'),
663+
(1, 'b'),
664+
(2, 'a'),
665+
(2, 'b')],
666+
dtype='object', names=['foo', 'bar'])
667+
>>> idx.set_levels([['a', 'b'], [1, 2]], level=[0, 1])
668+
MultiIndex([('a', 1),
669+
('a', 2),
670+
('b', 1),
671+
('b', 2)],
672+
dtype='object', names=['foo', 'bar'])
673+
>>>>>>> Update doc string examples and docs
641674
"""
642675
if is_list_like(levels) and not isinstance(levels, Index):
643676
levels = list(levels)
@@ -741,6 +774,7 @@ def set_codes(self, codes, level=None, inplace=False,
741774
>>> idx = pd.MultiIndex.from_tuples([(1, 'one'), (1, 'two'),
742775
(2, 'one'), (2, 'two')],
743776
names=['foo', 'bar'])
777+
<<<<<<< HEAD
744778
>>> idx.set_codes([[1,0,1,0], [0,0,1,1]])
745779
MultiIndex(levels=[[1, 2], ['one', 'two']],
746780
codes=[[1, 0, 1, 0], [0, 0, 1, 1]],
@@ -757,6 +791,32 @@ def set_codes(self, codes, level=None, inplace=False,
757791
MultiIndex(levels=[[1, 2], ['one', 'two']],
758792
codes=[[1, 0, 1, 0], [0, 0, 1, 1]],
759793
names=['foo', 'bar'])
794+
=======
795+
>>> idx.set_codes([[1, 0, 1, 0], [0, 0, 1, 1]])
796+
MultiIndex([(2, 'one'),
797+
(1, 'one'),
798+
(2, 'two'),
799+
(1, 'two')],
800+
dtype='object', names=['foo', 'bar'])
801+
>>> idx.set_codes([1, 0, 1, 0], level=0)
802+
MultiIndex([(2, 'one'),
803+
(1, 'two'),
804+
(2, 'one'),
805+
(1, 'two')],
806+
dtype='object', names=['foo', 'bar'])
807+
>>> idx.set_codes([0, 0, 1, 1], level='bar')
808+
MultiIndex([(1, 'one'),
809+
(1, 'one'),
810+
(2, 'two'),
811+
(2, 'two')],
812+
dtype='object', names=['foo', 'bar'])
813+
>>> idx.set_codes([[1, 0, 1, 0], [0, 0, 1, 1]], level=[0, 1])
814+
MultiIndex([(2, 'one'),
815+
(1, 'one'),
816+
(2, 'two'),
817+
(1, 'two')],
818+
dtype='object', names=['foo', 'bar'])
819+
>>>>>>> Update doc string examples and docs
760820
"""
761821
if level is not None and not is_list_like(level):
762822
if not is_list_like(codes):
@@ -1505,9 +1565,19 @@ def to_hierarchical(self, n_repeat, n_shuffle=1):
15051565
>>> idx = pd.MultiIndex.from_tuples([(1, 'one'), (1, 'two'),
15061566
(2, 'one'), (2, 'two')])
15071567
>>> idx.to_hierarchical(3)
1508-
MultiIndex(levels=[[1, 2], ['one', 'two']],
1509-
codes=[[0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1],
1510-
[0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1]])
1568+
MultiIndex([(1, 'one'),
1569+
(1, 'one'),
1570+
(1, 'one'),
1571+
(1, 'two'),
1572+
(1, 'two'),
1573+
(1, 'two'),
1574+
(2, 'one'),
1575+
(2, 'one'),
1576+
(2, 'one'),
1577+
(2, 'two'),
1578+
(2, 'two'),
1579+
(2, 'two')],
1580+
dtype='object')
15111581
"""
15121582
levels = self.levels
15131583
codes = [np.repeat(level_codes, n_repeat) for
@@ -1598,16 +1668,21 @@ def _sort_levels_monotonic(self):
15981668
Examples
15991669
--------
16001670
1601-
>>> i = pd.MultiIndex(levels=[['a', 'b'], ['bb', 'aa']],
1602-
codes=[[0, 0, 1, 1], [0, 1, 0, 1]])
1603-
>>> i
1604-
MultiIndex(levels=[['a', 'b'], ['bb', 'aa']],
1605-
codes=[[0, 0, 1, 1], [0, 1, 0, 1]])
1606-
1607-
>>> i.sort_monotonic()
1608-
MultiIndex(levels=[['a', 'b'], ['aa', 'bb']],
1609-
codes=[[0, 0, 1, 1], [1, 0, 1, 0]])
1671+
>>> mi = pd.MultiIndex(levels=[['a', 'b'], ['bb', 'aa']],
1672+
... codes=[[0, 0, 1, 1], [0, 1, 0, 1]])
1673+
>>> mi
1674+
MultiIndex([('a', 'bb'),
1675+
('a', 'aa'),
1676+
('b', 'bb'),
1677+
('b', 'aa')],
1678+
dtype='object')
16101679
1680+
>>> mi.sort_values()
1681+
MultiIndex([('a', 'aa'),
1682+
('a', 'bb'),
1683+
('b', 'aa'),
1684+
('b', 'bb')],
1685+
dtype='object')
16111686
"""
16121687

16131688
if self.is_lexsorted() and self.is_monotonic:
@@ -1656,20 +1731,25 @@ def remove_unused_levels(self):
16561731
16571732
Examples
16581733
--------
1659-
>>> i = pd.MultiIndex.from_product([range(2), list('ab')])
1660-
MultiIndex(levels=[[0, 1], ['a', 'b']],
1661-
codes=[[0, 0, 1, 1], [0, 1, 0, 1]])
1734+
>>> mi = pd.MultiIndex.from_product([range(2), list('ab')])
1735+
>>> mi
1736+
MultiIndex([(0, 'a'),
1737+
(0, 'b'),
1738+
(1, 'a'),
1739+
(1, 'b')],
1740+
dtype='object')
16621741
1663-
>>> i[2:]
1664-
MultiIndex(levels=[[0, 1], ['a', 'b']],
1665-
codes=[[1, 1], [0, 1]])
1742+
>>> mi[2:]
1743+
MultiIndex([(1, 'a'),
1744+
(1, 'b')],
1745+
dtype='object')
16661746
16671747
The 0 from the first level is not represented
16681748
and can be removed
16691749
1670-
>>> i[2:].remove_unused_levels()
1671-
MultiIndex(levels=[[1], ['a', 'b']],
1672-
codes=[[0, 0], [0, 1]])
1750+
>>> mi2 = mi[2:].remove_unused_levels()
1751+
>>> mi2.levels
1752+
FrozenList([[1], ['a', 'b']])
16731753
"""
16741754

16751755
new_levels = []
@@ -1975,11 +2055,16 @@ def swaplevel(self, i=-2, j=-1):
19752055
>>> mi = pd.MultiIndex(levels=[['a', 'b'], ['bb', 'aa']],
19762056
... codes=[[0, 0, 1, 1], [0, 1, 0, 1]])
19772057
>>> mi
1978-
MultiIndex(levels=[['a', 'b'], ['bb', 'aa']],
1979-
codes=[[0, 0, 1, 1], [0, 1, 0, 1]])
2058+
MultiIndex([('a', 'bb'),
2059+
('a', 'aa'),
2060+
('b', 'bb'),
2061+
('b', 'aa')],
2062+
dtype='object')
19802063
>>> mi.swaplevel(0, 1)
1981-
MultiIndex(levels=[['bb', 'aa'], ['a', 'b']],
1982-
codes=[[0, 1, 0, 1], [0, 0, 1, 1]])
2064+
MultiIndex([('bb', 'a'),
2065+
('aa', 'a'),
2066+
('bb', 'b'),
2067+
('aa', 'b')],
19832068
"""
19842069
new_levels = list(self.levels)
19852070
new_codes = list(self.codes)

0 commit comments

Comments
 (0)