From c5d4ec6dd58a333f1fffacae7bfb33a55376a6d7 Mon Sep 17 00:00:00 2001 From: Skipper Seabold Date: Wed, 14 Sep 2011 19:15:18 -0400 Subject: [PATCH 1/2] ENH: Allow to sort on index level by name --- pandas/core/index.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/pandas/core/index.py b/pandas/core/index.py index 99b2ff809013d..209172d23e4d0 100644 --- a/pandas/core/index.py +++ b/pandas/core/index.py @@ -790,7 +790,8 @@ def sortlevel(self, level=0, ascending=True): Parameters ---------- - level : int, default 0 + level : int or str, default 0 + If a string is given, must be a name of the level ascending : boolean, default True False to sort in descending order @@ -799,8 +800,14 @@ def sortlevel(self, level=0, ascending=True): sorted_index : MultiIndex """ labels = list(self.labels) + try: + level = self.names.index(level) + except: + raise ValueError("level %s not in index names" % level) + primary = labels.pop(level) + # Lexsort starts from END indexer = np.lexsort(tuple(labels[::-1]) + (primary,)) From cf2ef6ececc3e3e9c4f5ce0982173c81a43e743c Mon Sep 17 00:00:00 2001 From: Skipper Seabold Date: Wed, 14 Sep 2011 19:53:03 -0400 Subject: [PATCH 2/2] BUG: Allow int to pass with sort on index level --- pandas/core/index.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/pandas/core/index.py b/pandas/core/index.py index 209172d23e4d0..a30883dd79b7e 100644 --- a/pandas/core/index.py +++ b/pandas/core/index.py @@ -800,10 +800,11 @@ def sortlevel(self, level=0, ascending=True): sorted_index : MultiIndex """ labels = list(self.labels) - try: - level = self.names.index(level) - except: - raise ValueError("level %s not in index names" % level) + if not isinstance(level, int): + try: + level = self.names.index(level) + except: + raise ValueError("level %s not in index names" % level) primary = labels.pop(level)