Skip to content

Commit 913c216

Browse files
committed
Update doc string examples and docs
1 parent 619b643 commit 913c216

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
@@ -381,9 +381,11 @@ def from_tuples(cls, tuples, sortorder=None, names=None):
381381
>>> tuples = [(1, 'red'), (1, 'blue'),
382382
... (2, 'red'), (2, 'blue')]
383383
>>> pd.MultiIndex.from_tuples(tuples, names=('number', 'color'))
384-
MultiIndex(levels=[[1, 2], ['blue', 'red']],
385-
codes=[[0, 0, 1, 1], [1, 0, 1, 0]],
386-
names=['number', 'color'])
384+
MultiIndex([(1, 'red'),
385+
(1, 'blue'),
386+
(2, 'red'),
387+
(2, 'blue')],
388+
dtype='object', names=['number', 'color'])
387389
"""
388390
if not is_list_like(tuples):
389391
raise TypeError('Input must be a list / sequence of tuple-likes.')
@@ -438,9 +440,13 @@ def from_product(cls, iterables, sortorder=None, names=None):
438440
>>> colors = ['green', 'purple']
439441
>>> pd.MultiIndex.from_product([numbers, colors],
440442
... names=['number', 'color'])
441-
MultiIndex(levels=[[0, 1, 2], ['green', 'purple']],
442-
codes=[[0, 0, 1, 1, 2, 2], [0, 1, 0, 1, 0, 1]],
443-
names=['number', 'color'])
443+
MultiIndex([(0, 'green'),
444+
(0, 'purple'),
445+
(1, 'green'),
446+
(1, 'purple'),
447+
(2, 'green'),
448+
(2, 'purple')],
449+
dtype='object', names=['number', 'color'])
444450
"""
445451
from pandas.core.arrays.categorical import _factorize_from_iterables
446452
from pandas.core.reshape.util import cartesian_product
@@ -623,6 +629,7 @@ def set_levels(self, levels, level=None, inplace=False,
623629
>>> idx = pd.MultiIndex.from_tuples([(1, 'one'), (1, 'two'),
624630
(2, 'one'), (2, 'two')],
625631
names=['foo', 'bar'])
632+
<<<<<<< HEAD
626633
>>> idx.set_levels([['a','b'], [1,2]])
627634
MultiIndex(levels=[['a', 'b'], [1, 2]],
628635
codes=[[0, 0, 1, 1], [0, 1, 0, 1]],
@@ -639,6 +646,32 @@ def set_levels(self, levels, level=None, inplace=False,
639646
MultiIndex(levels=[['a', 'b'], [1, 2]],
640647
codes=[[0, 0, 1, 1], [0, 1, 0, 1]],
641648
names=['foo', 'bar'])
649+
=======
650+
>>> idx.set_levels([['a', 'b'], [1, 2]])
651+
MultiIndex([('a', 1),
652+
('a', 2),
653+
('b', 1),
654+
('b', 2)],
655+
dtype='object', names=['foo', 'bar'])
656+
>>> idx.set_levels(['a', 'b'], level=0)
657+
MultiIndex([('a', 'one'),
658+
('a', 'two'),
659+
('b', 'one'),
660+
('b', 'two')],
661+
dtype='object', names=['foo', 'bar'])
662+
>>> idx.set_levels(['a', 'b'], level='bar')
663+
MultiIndex([(1, 'a'),
664+
(1, 'b'),
665+
(2, 'a'),
666+
(2, 'b')],
667+
dtype='object', names=['foo', 'bar'])
668+
>>> idx.set_levels([['a', 'b'], [1, 2]], level=[0, 1])
669+
MultiIndex([('a', 1),
670+
('a', 2),
671+
('b', 1),
672+
('b', 2)],
673+
dtype='object', names=['foo', 'bar'])
674+
>>>>>>> Update doc string examples and docs
642675
"""
643676
if is_list_like(levels) and not isinstance(levels, Index):
644677
levels = list(levels)
@@ -742,6 +775,7 @@ def set_codes(self, codes, level=None, inplace=False,
742775
>>> idx = pd.MultiIndex.from_tuples([(1, 'one'), (1, 'two'),
743776
(2, 'one'), (2, 'two')],
744777
names=['foo', 'bar'])
778+
<<<<<<< HEAD
745779
>>> idx.set_codes([[1,0,1,0], [0,0,1,1]])
746780
MultiIndex(levels=[[1, 2], ['one', 'two']],
747781
codes=[[1, 0, 1, 0], [0, 0, 1, 1]],
@@ -758,6 +792,32 @@ def set_codes(self, codes, level=None, inplace=False,
758792
MultiIndex(levels=[[1, 2], ['one', 'two']],
759793
codes=[[1, 0, 1, 0], [0, 0, 1, 1]],
760794
names=['foo', 'bar'])
795+
=======
796+
>>> idx.set_codes([[1, 0, 1, 0], [0, 0, 1, 1]])
797+
MultiIndex([(2, 'one'),
798+
(1, 'one'),
799+
(2, 'two'),
800+
(1, 'two')],
801+
dtype='object', names=['foo', 'bar'])
802+
>>> idx.set_codes([1, 0, 1, 0], level=0)
803+
MultiIndex([(2, 'one'),
804+
(1, 'two'),
805+
(2, 'one'),
806+
(1, 'two')],
807+
dtype='object', names=['foo', 'bar'])
808+
>>> idx.set_codes([0, 0, 1, 1], level='bar')
809+
MultiIndex([(1, 'one'),
810+
(1, 'one'),
811+
(2, 'two'),
812+
(2, 'two')],
813+
dtype='object', names=['foo', 'bar'])
814+
>>> idx.set_codes([[1, 0, 1, 0], [0, 0, 1, 1]], level=[0, 1])
815+
MultiIndex([(2, 'one'),
816+
(1, 'one'),
817+
(2, 'two'),
818+
(1, 'two')],
819+
dtype='object', names=['foo', 'bar'])
820+
>>>>>>> Update doc string examples and docs
761821
"""
762822
if level is not None and not is_list_like(level):
763823
if not is_list_like(codes):
@@ -1504,9 +1564,19 @@ def to_hierarchical(self, n_repeat, n_shuffle=1):
15041564
>>> idx = pd.MultiIndex.from_tuples([(1, 'one'), (1, 'two'),
15051565
(2, 'one'), (2, 'two')])
15061566
>>> idx.to_hierarchical(3)
1507-
MultiIndex(levels=[[1, 2], ['one', 'two']],
1508-
codes=[[0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1],
1509-
[0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1]])
1567+
MultiIndex([(1, 'one'),
1568+
(1, 'one'),
1569+
(1, 'one'),
1570+
(1, 'two'),
1571+
(1, 'two'),
1572+
(1, 'two'),
1573+
(2, 'one'),
1574+
(2, 'one'),
1575+
(2, 'one'),
1576+
(2, 'two'),
1577+
(2, 'two'),
1578+
(2, 'two')],
1579+
dtype='object')
15101580
"""
15111581
levels = self.levels
15121582
codes = [np.repeat(level_codes, n_repeat) for
@@ -1593,16 +1663,21 @@ def _sort_levels_monotonic(self):
15931663
Examples
15941664
--------
15951665
1596-
>>> i = pd.MultiIndex(levels=[['a', 'b'], ['bb', 'aa']],
1597-
codes=[[0, 0, 1, 1], [0, 1, 0, 1]])
1598-
>>> i
1599-
MultiIndex(levels=[['a', 'b'], ['bb', 'aa']],
1600-
codes=[[0, 0, 1, 1], [0, 1, 0, 1]])
1601-
1602-
>>> i.sort_monotonic()
1603-
MultiIndex(levels=[['a', 'b'], ['aa', 'bb']],
1604-
codes=[[0, 0, 1, 1], [1, 0, 1, 0]])
1666+
>>> mi = pd.MultiIndex(levels=[['a', 'b'], ['bb', 'aa']],
1667+
... codes=[[0, 0, 1, 1], [0, 1, 0, 1]])
1668+
>>> mi
1669+
MultiIndex([('a', 'bb'),
1670+
('a', 'aa'),
1671+
('b', 'bb'),
1672+
('b', 'aa')],
1673+
dtype='object')
16051674
1675+
>>> mi.sort_values()
1676+
MultiIndex([('a', 'aa'),
1677+
('a', 'bb'),
1678+
('b', 'aa'),
1679+
('b', 'bb')],
1680+
dtype='object')
16061681
"""
16071682

16081683
if self.is_lexsorted() and self.is_monotonic:
@@ -1651,20 +1726,25 @@ def remove_unused_levels(self):
16511726
16521727
Examples
16531728
--------
1654-
>>> i = pd.MultiIndex.from_product([range(2), list('ab')])
1655-
MultiIndex(levels=[[0, 1], ['a', 'b']],
1656-
codes=[[0, 0, 1, 1], [0, 1, 0, 1]])
1729+
>>> mi = pd.MultiIndex.from_product([range(2), list('ab')])
1730+
>>> mi
1731+
MultiIndex([(0, 'a'),
1732+
(0, 'b'),
1733+
(1, 'a'),
1734+
(1, 'b')],
1735+
dtype='object')
16571736
1658-
>>> i[2:]
1659-
MultiIndex(levels=[[0, 1], ['a', 'b']],
1660-
codes=[[1, 1], [0, 1]])
1737+
>>> mi[2:]
1738+
MultiIndex([(1, 'a'),
1739+
(1, 'b')],
1740+
dtype='object')
16611741
16621742
The 0 from the first level is not represented
16631743
and can be removed
16641744
1665-
>>> i[2:].remove_unused_levels()
1666-
MultiIndex(levels=[[1], ['a', 'b']],
1667-
codes=[[0, 0], [0, 1]])
1745+
>>> mi2 = mi[2:].remove_unused_levels()
1746+
>>> mi2.levels
1747+
FrozenList([[1], ['a', 'b']])
16681748
"""
16691749

16701750
new_levels = []
@@ -1970,11 +2050,16 @@ def swaplevel(self, i=-2, j=-1):
19702050
>>> mi = pd.MultiIndex(levels=[['a', 'b'], ['bb', 'aa']],
19712051
... codes=[[0, 0, 1, 1], [0, 1, 0, 1]])
19722052
>>> mi
1973-
MultiIndex(levels=[['a', 'b'], ['bb', 'aa']],
1974-
codes=[[0, 0, 1, 1], [0, 1, 0, 1]])
2053+
MultiIndex([('a', 'bb'),
2054+
('a', 'aa'),
2055+
('b', 'bb'),
2056+
('b', 'aa')],
2057+
dtype='object')
19752058
>>> mi.swaplevel(0, 1)
1976-
MultiIndex(levels=[['bb', 'aa'], ['a', 'b']],
1977-
codes=[[0, 1, 0, 1], [0, 0, 1, 1]])
2059+
MultiIndex([('bb', 'a'),
2060+
('aa', 'a'),
2061+
('bb', 'b'),
2062+
('aa', 'b')],
19782063
"""
19792064
new_levels = list(self.levels)
19802065
new_codes = list(self.codes)

0 commit comments

Comments
 (0)