@@ -21,75 +21,68 @@ class TestDataFrameSorting(tm.TestCase, TestData):
2121
2222 _multiprocess_can_split_ = True
2323
24- def test_sort_values (self ):
25- # API for 9816
24+ def test_sort_index (self ):
25+ # GH13496
2626
27- # sort_index
2827 frame = DataFrame (np .arange (16 ).reshape (4 , 4 ), index = [1 , 2 , 3 , 4 ],
2928 columns = ['A' , 'B' , 'C' , 'D' ])
3029
31- # 9816 deprecated
32- with tm .assert_produces_warning (FutureWarning ):
33- frame .sort (columns = 'A' )
34- with tm .assert_produces_warning (FutureWarning ):
35- frame .sort ()
36-
30+ # axis=0 : sort rows by index labels
3731 unordered = frame .ix [[3 , 2 , 4 , 1 ]]
38- expected = unordered .sort_index ()
39-
4032 result = unordered .sort_index (axis = 0 )
33+ expected = frame
4134 assert_frame_equal (result , expected )
4235
43- unordered = frame .ix [:, [2 , 1 , 3 , 0 ]]
44- expected = unordered .sort_index (axis = 1 )
36+ result = unordered .sort_index (ascending = False )
37+ expected = frame [::- 1 ]
38+ assert_frame_equal (result , expected )
4539
40+ # axis=1 : sort columns by column names
41+ unordered = frame .ix [:, [2 , 1 , 3 , 0 ]]
4642 result = unordered .sort_index (axis = 1 )
47- assert_frame_equal (result , expected )
43+ assert_frame_equal (result , frame )
44+
45+ result = unordered .sort_index (axis = 1 , ascending = False )
46+ expected = frame .ix [:, ::- 1 ]
4847 assert_frame_equal (result , expected )
4948
50- # sortlevel
51- mi = MultiIndex .from_tuples ([[1 , 1 , 3 ], [1 , 1 , 1 ]], names = list ('ABC' ))
49+ def test_sort_index_multiindex (self ):
50+ # GH13496
51+
52+ # sort rows by specified level of multi-index
53+ mi = MultiIndex .from_tuples ([[2 , 1 , 3 ], [1 , 1 , 1 ]], names = list ('ABC' ))
5254 df = DataFrame ([[1 , 2 ], [3 , 4 ]], mi )
5355
5456 result = df .sort_index (level = 'A' , sort_remaining = False )
5557 expected = df .sortlevel ('A' , sort_remaining = False )
5658 assert_frame_equal (result , expected )
5759
60+ # sort columns by specified level of multi-index
5861 df = df .T
5962 result = df .sort_index (level = 'A' , axis = 1 , sort_remaining = False )
6063 expected = df .sortlevel ('A' , axis = 1 , sort_remaining = False )
6164 assert_frame_equal (result , expected )
6265
63- # MI sort, but no by
66+ # MI sort, but no level: sort_level has no effect
6467 mi = MultiIndex .from_tuples ([[1 , 1 , 3 ], [1 , 1 , 1 ]], names = list ('ABC' ))
6568 df = DataFrame ([[1 , 2 ], [3 , 4 ]], mi )
6669 result = df .sort_index (sort_remaining = False )
6770 expected = df .sort_index ()
6871 assert_frame_equal (result , expected )
6972
70- def test_sort_index (self ):
73+ def test_sort (self ):
7174 frame = DataFrame (np .arange (16 ).reshape (4 , 4 ), index = [1 , 2 , 3 , 4 ],
7275 columns = ['A' , 'B' , 'C' , 'D' ])
7376
74- # axis=0
75- unordered = frame .ix [[3 , 2 , 4 , 1 ]]
76- sorted_df = unordered .sort_index (axis = 0 )
77- expected = frame
78- assert_frame_equal (sorted_df , expected )
79-
80- sorted_df = unordered .sort_index (ascending = False )
81- expected = frame [::- 1 ]
82- assert_frame_equal (sorted_df , expected )
83-
84- # axis=1
85- unordered = frame .ix [:, ['D' , 'B' , 'C' , 'A' ]]
86- sorted_df = unordered .sort_index (axis = 1 )
87- expected = frame
88- assert_frame_equal (sorted_df , expected )
77+ # 9816 deprecated
78+ with tm .assert_produces_warning (FutureWarning ):
79+ frame .sort (columns = 'A' )
80+ with tm .assert_produces_warning (FutureWarning ):
81+ frame .sort ()
8982
90- sorted_df = unordered . sort_index ( axis = 1 , ascending = False )
91- expected = frame . ix [:, :: - 1 ]
92- assert_frame_equal ( sorted_df , expected )
83+ def test_sort_values ( self ):
84+ frame = DataFrame ([[ 1 , 1 , 2 ], [ 3 , 1 , 0 ], [ 4 , 5 , 6 ]],
85+ index = [ 1 , 2 , 3 ], columns = list ( 'ABC' ) )
9386
9487 # by column
9588 sorted_df = frame .sort_values (by = 'A' )
@@ -109,16 +102,17 @@ def test_sort_index(self):
109102 sorted_df = frame .sort_values (by = ['A' ], ascending = [False ])
110103 assert_frame_equal (sorted_df , expected )
111104
112- # check for now
113- sorted_df = frame .sort_values (by = 'A' )
114- assert_frame_equal (sorted_df , expected [::- 1 ])
115- expected = frame .sort_values (by = 'A' )
105+ # multiple bys
106+ sorted_df = frame .sort_values (by = ['B' , 'C' ])
107+ expected = frame .loc [[2 , 1 , 3 ]]
116108 assert_frame_equal (sorted_df , expected )
117109
118- expected = frame .sort_values (by = ['A' , 'B' ], ascending = False )
119- sorted_df = frame .sort_values (by = ['A' , 'B' ])
110+ sorted_df = frame .sort_values (by = ['B' , 'C' ], ascending = False )
120111 assert_frame_equal (sorted_df , expected [::- 1 ])
121112
113+ sorted_df = frame .sort_values (by = ['B' , 'A' ], ascending = [True , False ])
114+ assert_frame_equal (sorted_df , expected )
115+
122116 self .assertRaises (ValueError , lambda : frame .sort_values (
123117 by = ['A' , 'B' ], axis = 2 , inplace = True ))
124118
@@ -130,6 +124,25 @@ def test_sort_index(self):
130124 with assertRaisesRegexp (ValueError , msg ):
131125 frame .sort_values (by = ['A' , 'B' ], axis = 0 , ascending = [True ] * 5 )
132126
127+ def test_sort_values_inplace (self ):
128+ frame = DataFrame (np .random .randn (4 , 4 ), index = [1 , 2 , 3 , 4 ],
129+ columns = ['A' , 'B' , 'C' , 'D' ])
130+
131+ sorted_df = frame .copy ()
132+ sorted_df .sort_values (by = 'A' , inplace = True )
133+ expected = frame .sort_values (by = 'A' )
134+ assert_frame_equal (sorted_df , expected )
135+
136+ sorted_df = frame .copy ()
137+ sorted_df .sort_values (by = 'A' , ascending = False , inplace = True )
138+ expected = frame .sort_values (by = 'A' , ascending = False )
139+ assert_frame_equal (sorted_df , expected )
140+
141+ sorted_df = frame .copy ()
142+ sorted_df .sort_values (by = ['A' , 'B' ], ascending = False , inplace = True )
143+ expected = frame .sort_values (by = ['A' , 'B' ], ascending = False )
144+ assert_frame_equal (sorted_df , expected )
145+
133146 def test_sort_index_categorical_index (self ):
134147
135148 df = (DataFrame ({'A' : np .arange (6 , dtype = 'int64' ),
@@ -361,25 +374,6 @@ def test_sort_index_different_sortorder(self):
361374 result = idf ['C' ].sort_index (ascending = [1 , 0 ])
362375 assert_series_equal (result , expected ['C' ])
363376
364- def test_sort_inplace (self ):
365- frame = DataFrame (np .random .randn (4 , 4 ), index = [1 , 2 , 3 , 4 ],
366- columns = ['A' , 'B' , 'C' , 'D' ])
367-
368- sorted_df = frame .copy ()
369- sorted_df .sort_values (by = 'A' , inplace = True )
370- expected = frame .sort_values (by = 'A' )
371- assert_frame_equal (sorted_df , expected )
372-
373- sorted_df = frame .copy ()
374- sorted_df .sort_values (by = 'A' , ascending = False , inplace = True )
375- expected = frame .sort_values (by = 'A' , ascending = False )
376- assert_frame_equal (sorted_df , expected )
377-
378- sorted_df = frame .copy ()
379- sorted_df .sort_values (by = ['A' , 'B' ], ascending = False , inplace = True )
380- expected = frame .sort_values (by = ['A' , 'B' ], ascending = False )
381- assert_frame_equal (sorted_df , expected )
382-
383377 def test_sort_index_duplicates (self ):
384378
385379 # with 9816, these are all translated to .sort_values
0 commit comments