@@ -2530,7 +2530,7 @@ def _m8_to_i8(x):
25302530 #----------------------------------------------------------------------
25312531 # Sorting
25322532
2533- def sort (self , columns = None , column = None , axis = 0 , ascending = True ,
2533+ def sort (self , columns = None , axis = 0 , ascending = True ,
25342534 inplace = False ):
25352535 """
25362536 Sort DataFrame either by labels (along either axis) or by the values in
@@ -2539,8 +2539,9 @@ def sort(self, columns=None, column=None, axis=0, ascending=True,
25392539 Parameters
25402540 ----------
25412541 columns : object
2542- Column name(s) in frame. Accepts a column name or a list or tuple
2543- for a nested sort.
2542+ Column name(s) in frame. Accepts a column name or a list
2543+ for a nested sort. A tuple will be interpreted as the
2544+ levels of a multi-index.
25442545 ascending : boolean or list, default True
25452546 Sort ascending vs. descending. Specify list for multiple sort
25462547 orders
@@ -2557,9 +2558,6 @@ def sort(self, columns=None, column=None, axis=0, ascending=True,
25572558 -------
25582559 sorted : DataFrame
25592560 """
2560- if column is not None : # pragma: no cover
2561- warnings .warn ("column is deprecated, use columns" , FutureWarning )
2562- columns = column
25632561 return self .sort_index (by = columns , axis = axis , ascending = ascending ,
25642562 inplace = inplace )
25652563
@@ -2574,8 +2572,9 @@ def sort_index(self, axis=0, by=None, ascending=True, inplace=False,
25742572 axis : {0, 1}
25752573 Sort index/rows versus columns
25762574 by : object
2577- Column name(s) in frame. Accepts a column name or a list or tuple
2578- for a nested sort.
2575+ Column name(s) in frame. Accepts a column name or a list
2576+ for a nested sort. A tuple will be interpreted as the
2577+ levels of a multi-index.
25792578 ascending : boolean or list, default True
25802579 Sort ascending vs. descending. Specify list for multiple sort
25812580 orders
@@ -2602,7 +2601,7 @@ def sort_index(self, axis=0, by=None, ascending=True, inplace=False,
26022601 if axis != 0 :
26032602 raise ValueError ('When sorting by column, axis must be 0 '
26042603 '(rows)' )
2605- if not isinstance (by , ( tuple , list ) ):
2604+ if not isinstance (by , list ):
26062605 by = [by ]
26072606 if com ._is_sequence (ascending ) and len (by ) != len (ascending ):
26082607 raise ValueError ('Length of ascending (%d) != length of by'
@@ -2629,6 +2628,13 @@ def trans(v):
26292628 by = by [0 ]
26302629 k = self [by ].values
26312630 if k .ndim == 2 :
2631+
2632+ # try to be helpful
2633+ if isinstance (self .columns , MultiIndex ):
2634+ raise ValueError ('Cannot sort by column %s in a multi-index'
2635+ ' you need to explicity provide all the levels'
2636+ % str (by ))
2637+
26322638 raise ValueError ('Cannot sort by duplicate column %s'
26332639 % str (by ))
26342640 if isinstance (ascending , (tuple , list )):
0 commit comments