Skip to content

Commit b36da1c

Browse files
committed
Update doc string examples and docs
1 parent ff0e93b commit b36da1c

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
@@ -421,9 +421,11 @@ def from_tuples(cls, tuples, sortorder=None, names=None):
421421
>>> tuples = [(1, 'red'), (1, 'blue'),
422422
... (2, 'red'), (2, 'blue')]
423423
>>> pd.MultiIndex.from_tuples(tuples, names=('number', 'color'))
424-
MultiIndex(levels=[[1, 2], ['blue', 'red']],
425-
codes=[[0, 0, 1, 1], [1, 0, 1, 0]],
426-
names=['number', 'color'])
424+
MultiIndex([(1, 'red'),
425+
(1, 'blue'),
426+
(2, 'red'),
427+
(2, 'blue')],
428+
dtype='object', names=['number', 'color'])
427429
"""
428430
if not is_list_like(tuples):
429431
raise TypeError('Input must be a list / sequence of tuple-likes.')
@@ -478,9 +480,13 @@ def from_product(cls, iterables, sortorder=None, names=None):
478480
>>> colors = ['green', 'purple']
479481
>>> pd.MultiIndex.from_product([numbers, colors],
480482
... names=['number', 'color'])
481-
MultiIndex(levels=[[0, 1, 2], ['green', 'purple']],
482-
codes=[[0, 0, 1, 1, 2, 2], [0, 1, 0, 1, 0, 1]],
483-
names=['number', 'color'])
483+
MultiIndex([(0, 'green'),
484+
(0, 'purple'),
485+
(1, 'green'),
486+
(1, 'purple'),
487+
(2, 'green'),
488+
(2, 'purple')],
489+
dtype='object', names=['number', 'color'])
484490
"""
485491
from pandas.core.arrays.categorical import _factorize_from_iterables
486492
from pandas.core.reshape.util import cartesian_product
@@ -664,6 +670,7 @@ def set_levels(self, levels, level=None, inplace=False,
664670
>>> idx = pd.MultiIndex.from_tuples([(1, 'one'), (1, 'two'),
665671
(2, 'one'), (2, 'two')],
666672
names=['foo', 'bar'])
673+
<<<<<<< HEAD
667674
>>> idx.set_levels([['a','b'], [1,2]])
668675
MultiIndex(levels=[['a', 'b'], [1, 2]],
669676
codes=[[0, 0, 1, 1], [0, 1, 0, 1]],
@@ -680,6 +687,32 @@ def set_levels(self, levels, level=None, inplace=False,
680687
MultiIndex(levels=[['a', 'b'], [1, 2]],
681688
codes=[[0, 0, 1, 1], [0, 1, 0, 1]],
682689
names=['foo', 'bar'])
690+
=======
691+
>>> idx.set_levels([['a', 'b'], [1, 2]])
692+
MultiIndex([('a', 1),
693+
('a', 2),
694+
('b', 1),
695+
('b', 2)],
696+
dtype='object', names=['foo', 'bar'])
697+
>>> idx.set_levels(['a', 'b'], level=0)
698+
MultiIndex([('a', 'one'),
699+
('a', 'two'),
700+
('b', 'one'),
701+
('b', 'two')],
702+
dtype='object', names=['foo', 'bar'])
703+
>>> idx.set_levels(['a', 'b'], level='bar')
704+
MultiIndex([(1, 'a'),
705+
(1, 'b'),
706+
(2, 'a'),
707+
(2, 'b')],
708+
dtype='object', names=['foo', 'bar'])
709+
>>> idx.set_levels([['a', 'b'], [1, 2]], level=[0, 1])
710+
MultiIndex([('a', 1),
711+
('a', 2),
712+
('b', 1),
713+
('b', 2)],
714+
dtype='object', names=['foo', 'bar'])
715+
>>>>>>> Update doc string examples and docs
683716
"""
684717
if is_list_like(levels) and not isinstance(levels, Index):
685718
levels = list(levels)
@@ -783,6 +816,7 @@ def set_codes(self, codes, level=None, inplace=False,
783816
>>> idx = pd.MultiIndex.from_tuples([(1, 'one'), (1, 'two'),
784817
(2, 'one'), (2, 'two')],
785818
names=['foo', 'bar'])
819+
<<<<<<< HEAD
786820
>>> idx.set_codes([[1,0,1,0], [0,0,1,1]])
787821
MultiIndex(levels=[[1, 2], ['one', 'two']],
788822
codes=[[1, 0, 1, 0], [0, 0, 1, 1]],
@@ -799,6 +833,32 @@ def set_codes(self, codes, level=None, inplace=False,
799833
MultiIndex(levels=[[1, 2], ['one', 'two']],
800834
codes=[[1, 0, 1, 0], [0, 0, 1, 1]],
801835
names=['foo', 'bar'])
836+
=======
837+
>>> idx.set_codes([[1, 0, 1, 0], [0, 0, 1, 1]])
838+
MultiIndex([(2, 'one'),
839+
(1, 'one'),
840+
(2, 'two'),
841+
(1, 'two')],
842+
dtype='object', names=['foo', 'bar'])
843+
>>> idx.set_codes([1, 0, 1, 0], level=0)
844+
MultiIndex([(2, 'one'),
845+
(1, 'two'),
846+
(2, 'one'),
847+
(1, 'two')],
848+
dtype='object', names=['foo', 'bar'])
849+
>>> idx.set_codes([0, 0, 1, 1], level='bar')
850+
MultiIndex([(1, 'one'),
851+
(1, 'one'),
852+
(2, 'two'),
853+
(2, 'two')],
854+
dtype='object', names=['foo', 'bar'])
855+
>>> idx.set_codes([[1, 0, 1, 0], [0, 0, 1, 1]], level=[0, 1])
856+
MultiIndex([(2, 'one'),
857+
(1, 'one'),
858+
(2, 'two'),
859+
(1, 'two')],
860+
dtype='object', names=['foo', 'bar'])
861+
>>>>>>> Update doc string examples and docs
802862
"""
803863
if level is not None and not is_list_like(level):
804864
if not is_list_like(codes):
@@ -1547,9 +1607,19 @@ def to_hierarchical(self, n_repeat, n_shuffle=1):
15471607
>>> idx = pd.MultiIndex.from_tuples([(1, 'one'), (1, 'two'),
15481608
(2, 'one'), (2, 'two')])
15491609
>>> idx.to_hierarchical(3)
1550-
MultiIndex(levels=[[1, 2], ['one', 'two']],
1551-
codes=[[0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1],
1552-
[0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1]])
1610+
MultiIndex([(1, 'one'),
1611+
(1, 'one'),
1612+
(1, 'one'),
1613+
(1, 'two'),
1614+
(1, 'two'),
1615+
(1, 'two'),
1616+
(2, 'one'),
1617+
(2, 'one'),
1618+
(2, 'one'),
1619+
(2, 'two'),
1620+
(2, 'two'),
1621+
(2, 'two')],
1622+
dtype='object')
15531623
"""
15541624
levels = self.levels
15551625
codes = [np.repeat(level_codes, n_repeat) for
@@ -1640,16 +1710,21 @@ def _sort_levels_monotonic(self):
16401710
Examples
16411711
--------
16421712
1643-
>>> i = pd.MultiIndex(levels=[['a', 'b'], ['bb', 'aa']],
1644-
codes=[[0, 0, 1, 1], [0, 1, 0, 1]])
1645-
>>> i
1646-
MultiIndex(levels=[['a', 'b'], ['bb', 'aa']],
1647-
codes=[[0, 0, 1, 1], [0, 1, 0, 1]])
1648-
1649-
>>> i.sort_monotonic()
1650-
MultiIndex(levels=[['a', 'b'], ['aa', 'bb']],
1651-
codes=[[0, 0, 1, 1], [1, 0, 1, 0]])
1713+
>>> mi = pd.MultiIndex(levels=[['a', 'b'], ['bb', 'aa']],
1714+
... codes=[[0, 0, 1, 1], [0, 1, 0, 1]])
1715+
>>> mi
1716+
MultiIndex([('a', 'bb'),
1717+
('a', 'aa'),
1718+
('b', 'bb'),
1719+
('b', 'aa')],
1720+
dtype='object')
16521721
1722+
>>> mi.sort_values()
1723+
MultiIndex([('a', 'aa'),
1724+
('a', 'bb'),
1725+
('b', 'aa'),
1726+
('b', 'bb')],
1727+
dtype='object')
16531728
"""
16541729

16551730
if self.is_lexsorted() and self.is_monotonic:
@@ -1698,20 +1773,25 @@ def remove_unused_levels(self):
16981773
16991774
Examples
17001775
--------
1701-
>>> i = pd.MultiIndex.from_product([range(2), list('ab')])
1702-
MultiIndex(levels=[[0, 1], ['a', 'b']],
1703-
codes=[[0, 0, 1, 1], [0, 1, 0, 1]])
1776+
>>> mi = pd.MultiIndex.from_product([range(2), list('ab')])
1777+
>>> mi
1778+
MultiIndex([(0, 'a'),
1779+
(0, 'b'),
1780+
(1, 'a'),
1781+
(1, 'b')],
1782+
dtype='object')
17041783
1705-
>>> i[2:]
1706-
MultiIndex(levels=[[0, 1], ['a', 'b']],
1707-
codes=[[1, 1], [0, 1]])
1784+
>>> mi[2:]
1785+
MultiIndex([(1, 'a'),
1786+
(1, 'b')],
1787+
dtype='object')
17081788
17091789
The 0 from the first level is not represented
17101790
and can be removed
17111791
1712-
>>> i[2:].remove_unused_levels()
1713-
MultiIndex(levels=[[1], ['a', 'b']],
1714-
codes=[[0, 0], [0, 1]])
1792+
>>> mi2 = mi[2:].remove_unused_levels()
1793+
>>> mi2.levels
1794+
FrozenList([[1], ['a', 'b']])
17151795
"""
17161796

17171797
new_levels = []
@@ -2018,11 +2098,16 @@ def swaplevel(self, i=-2, j=-1):
20182098
>>> mi = pd.MultiIndex(levels=[['a', 'b'], ['bb', 'aa']],
20192099
... codes=[[0, 0, 1, 1], [0, 1, 0, 1]])
20202100
>>> mi
2021-
MultiIndex(levels=[['a', 'b'], ['bb', 'aa']],
2022-
codes=[[0, 0, 1, 1], [0, 1, 0, 1]])
2101+
MultiIndex([('a', 'bb'),
2102+
('a', 'aa'),
2103+
('b', 'bb'),
2104+
('b', 'aa')],
2105+
dtype='object')
20232106
>>> mi.swaplevel(0, 1)
2024-
MultiIndex(levels=[['bb', 'aa'], ['a', 'b']],
2025-
codes=[[0, 1, 0, 1], [0, 0, 1, 1]])
2107+
MultiIndex([('bb', 'a'),
2108+
('aa', 'a'),
2109+
('bb', 'b'),
2110+
('aa', 'b')],
20262111
"""
20272112
new_levels = list(self.levels)
20282113
new_codes = list(self.codes)

0 commit comments

Comments
 (0)