1515MultiIndex / Advanced Indexing
1616******************************
1717
18- This section covers indexing with a ``MultiIndex `` and :ref: `more advanced indexing features <indexing.index_types >`.
18+ This section covers :ref: `indexing with a MultiIndex <advanced.hierarchical >`
19+ and :ref: `other advanced indexing features <indexing.index_types >`.
1920
2021See the :ref: `Indexing and Selecting Data <indexing >` for general indexing documentation.
2122
@@ -37,7 +38,7 @@ Hierarchical / Multi-level indexing is very exciting as it opens the door to som
3738quite sophisticated data analysis and manipulation, especially for working with
3839higher dimensional data. In essence, it enables you to store and manipulate
3940data with an arbitrary number of dimensions in lower dimensional data
40- structures like Series (1d) and DataFrame (2d).
41+ structures like `` Series `` (1d) and `` DataFrame `` (2d).
4142
4243In this section, we will show what exactly we mean by "hierarchical" indexing
4344and how it integrates with all of the pandas indexing functionality
@@ -83,8 +84,8 @@ to use the :meth:`MultiIndex.from_product` method:
8384 iterables = [[' bar' , ' baz' , ' foo' , ' qux' ], [' one' , ' two' ]]
8485 pd.MultiIndex.from_product(iterables, names = [' first' , ' second' ])
8586
86- As a convenience, you can pass a list of arrays directly into Series or
87- DataFrame to construct a ``MultiIndex `` automatically:
87+ As a convenience, you can pass a list of arrays directly into `` Series `` or
88+ `` DataFrame `` to construct a ``MultiIndex `` automatically:
8889
8990.. ipython :: python
9091
@@ -213,8 +214,8 @@ tuples:
213214 s + s[:- 2 ]
214215 s + s[::2 ]
215216
216- `` reindex `` can be called with another `` MultiIndex ``, or even a list or array
217- of tuples:
217+ The :meth: ` ~DataFrame. reindex ` method of `` Series ``/`` DataFrames `` can be
218+ called with another `` MultiIndex ``, or even a list or array of tuples:
218219
219220.. ipython :: python
220221
@@ -413,7 +414,7 @@ selecting data at a particular level of a ``MultiIndex`` easier.
413414 # using the slicers
414415 df.loc[(slice (None ),' one' ),:]
415416
416- You can also select on the columns with :meth: ` ~pandas.MultiIndex.xs `, by
417+ You can also select on the columns with `` xs ` `, by
417418providing the axis argument.
418419
419420.. ipython :: python
@@ -426,7 +427,7 @@ providing the axis argument.
426427 # using the slicers
427428 df.loc[:,(slice (None ),' one' )]
428429
429- :meth: ` ~pandas.MultiIndex.xs ` also allows selection with multiple keys.
430+ `` xs ` ` also allows selection with multiple keys.
430431
431432.. ipython :: python
432433
@@ -437,7 +438,7 @@ providing the axis argument.
437438 # using the slicers
438439 df.loc[:,(' bar' ,' one' )]
439440
440- You can pass ``drop_level=False `` to :meth: ` ~pandas.MultiIndex.xs ` to retain
441+ You can pass ``drop_level=False `` to `` xs ` ` to retain
441442the level that was selected.
442443
443444.. ipython :: python
@@ -460,9 +461,9 @@ Compare the above with the result using ``drop_level=True`` (the default value).
460461Advanced reindexing and alignment
461462~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
462463
463- The parameter ``level `` has been added to the `` reindex `` and `` align `` methods
464- of pandas objects. This is useful to broadcast values across a level. For
465- instance:
464+ Using the parameter ``level `` in the :meth: ` ~DataFrame. reindex ` and
465+ :meth: ` ~DataFrame.align ` methods of pandas objects is useful to broadcast
466+ values across a level. For instance:
466467
467468.. ipython :: python
468469
@@ -480,10 +481,10 @@ instance:
480481 df2_aligned
481482
482483
483- Swapping levels with :meth: ` ~pandas.MultiIndex. swaplevel `
484- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
484+ Swapping levels with `` swaplevel ` `
485+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
485486
486- The `` swaplevel `` function can switch the order of two levels:
487+ The :meth: ` ~MultiIndex. swaplevel ` method can switch the order of two levels:
487488
488489.. ipython :: python
489490
@@ -492,21 +493,21 @@ The ``swaplevel`` function can switch the order of two levels:
492493
493494 .. _advanced.reorderlevels :
494495
495- Reordering levels with :meth: ` ~pandas.MultiIndex. reorder_levels `
496- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
496+ Reordering levels with `` reorder_levels ` `
497+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
497498
498- The `` reorder_levels `` function generalizes the ``swaplevel `` function,
499- allowing you to permute the hierarchical index levels in one step:
499+ The :meth: ` ~MultiIndex. reorder_levels ` method generalizes the ``swaplevel ``
500+ method, allowing you to permute the hierarchical index levels in one step:
500501
501502.. ipython :: python
502503
503504 df[:5 ].reorder_levels([1 ,0 ], axis = 0 )
504505
505- Sorting a :class: ` ~pandas. MultiIndex `
506- -------------------------------------
506+ Sorting a `` MultiIndex ` `
507+ ------------------------
507508
508- For MultiIndex-ed objects to be indexed and sliced effectively, they need
509- to be sorted. As with any index, you can use `` sort_index ` `.
509+ For :class: ` MultiIndex ` -ed objects to be indexed and sliced effectively,
510+ they need to be sorted. As with any index, you can use :meth: ` ~DataFrame. sort_index `.
510511
511512.. ipython :: python
512513
@@ -658,9 +659,9 @@ faster than fancy indexing.
658659Index Types
659660-----------
660661
661- We have discussed ``MultiIndex `` in the previous sections pretty extensively. `` DatetimeIndex `` and `` PeriodIndex ``
662- are shown :ref: `here <timeseries.overview >`, and information about
663- ``TimedeltaIndex `` is found :ref: `here <timedeltas.timedeltas >`.
662+ We have discussed ``MultiIndex `` in the previous sections pretty extensively.
663+ Documentation about `` DatetimeIndex `` and `` PeriodIndex `` are shown :ref: `here <timeseries.overview >`,
664+ and documentation about ``TimedeltaIndex `` is found :ref: `here <timedeltas.timedeltaindex >`.
664665
665666In the following sub-sections we will highlight some other index types.
666667
@@ -1004,8 +1005,8 @@ Non-monotonic indexes require exact matches
10041005
10051006If the index of a `` Series`` or `` DataFrame`` is monotonically increasing or decreasing, then the bounds
10061007of a label- based slice can be outside the range of the index, much like slice indexing a
1007- normal Python `` list `` . Monotonicity of an index can be tested with the `` is_monotonic_increasing` ` and
1008- `` is_monotonic_decreasing` ` attributes.
1008+ normal Python `` list `` . Monotonicity of an index can be tested with the :meth: ` ~ Index. is_monotonic_increasing` and
1009+ :meth: ` ~ Index. is_monotonic_decreasing` attributes.
10091010
10101011.. ipython:: python
10111012
@@ -1039,9 +1040,9 @@ On the other hand, if the index is not monotonic, then both slice bounds must be
10391040 In [11 ]: df.loc[2 :3 , :]
10401041 KeyError : ' Cannot get right slice bound for non-unique label: 3'
10411042
1042- :meth: ` Index.is_monotonic_increasing` and :meth: ` Index.is_monotonic_decreasing` only check that
1043+ `` Index.is_monotonic_increasing`` and `` Index.is_monotonic_decreasing` ` only check that
10431044an index is weakly monotonic. To check for strict monotonicity, you can combine one of those with
1044- :meth:`Index.is_unique`
1045+ the :meth:`~ Index.is_unique` attribute.
10451046
10461047.. ipython:: python
10471048
@@ -1057,7 +1058,7 @@ Compared with standard Python sequence slicing in which the slice endpoint is
10571058not inclusive, label- based slicing in pandas ** is inclusive** . The primary
10581059reason for this is that it is often not possible to easily determine the
10591060" successor" or next element after a particular label in an index. For example,
1060- consider the following Series:
1061+ consider the following `` Series`` :
10611062
10621063.. ipython:: python
10631064
0 commit comments