@@ -81,30 +81,34 @@ def test_sort_values(self):
8181 with pytest .raises (ValueError , match = msg ):
8282 frame .sort_values (by = ["A" , "B" ], axis = 0 , ascending = [True ] * 5 )
8383
84- def test_sort_values_inplace (self ):
84+ @pytest .fixture (params = [None , lambda x : x ])
85+ def key (self , request ):
86+ return request .param
87+
88+ def test_sort_values_inplace (self , key ):
8589 frame = DataFrame (
8690 np .random .randn (4 , 4 ), index = [1 , 2 , 3 , 4 ], columns = ["A" , "B" , "C" , "D" ]
8791 )
8892
8993 sorted_df = frame .copy ()
90- sorted_df .sort_values (by = "A" , inplace = True )
91- expected = frame .sort_values (by = "A" )
92- tm . assert_frame_equal (sorted_df , expected )
94+ sorted_df .sort_values (by = "A" , inplace = True , key = key )
95+ expected = frame .sort_values (by = "A" , key = key )
96+ assert_frame_equal (sorted_df , expected )
9397
9498 sorted_df = frame .copy ()
95- sorted_df .sort_values (by = 1 , axis = 1 , inplace = True )
96- expected = frame .sort_values (by = 1 , axis = 1 )
97- tm . assert_frame_equal (sorted_df , expected )
99+ sorted_df .sort_values (by = 1 , axis = 1 , inplace = True , key = key )
100+ expected = frame .sort_values (by = 1 , axis = 1 , key = key )
101+ assert_frame_equal (sorted_df , expected )
98102
99103 sorted_df = frame .copy ()
100- sorted_df .sort_values (by = "A" , ascending = False , inplace = True )
101- expected = frame .sort_values (by = "A" , ascending = False )
102- tm . assert_frame_equal (sorted_df , expected )
104+ sorted_df .sort_values (by = "A" , ascending = False , inplace = True , key = key )
105+ expected = frame .sort_values (by = "A" , ascending = False , key = key )
106+ assert_frame_equal (sorted_df , expected )
103107
104108 sorted_df = frame .copy ()
105- sorted_df .sort_values (by = ["A" , "B" ], ascending = False , inplace = True )
106- expected = frame .sort_values (by = ["A" , "B" ], ascending = False )
107- tm . assert_frame_equal (sorted_df , expected )
109+ sorted_df .sort_values (by = ["A" , "B" ], ascending = False , inplace = True , key = key )
110+ expected = frame .sort_values (by = ["A" , "B" ], ascending = False , key = key )
111+ assert_frame_equal (sorted_df , expected )
108112
109113 def test_sort_nan (self ):
110114 # GH3917
@@ -247,6 +251,23 @@ def test_sort_multi_index(self):
247251
248252 tm .assert_frame_equal (result , expected )
249253
254+ def test_sort_multi_index_key (self ):
255+ # GH 25775, testing that sorting by index works with a multi-index.
256+ df = DataFrame (
257+ {"a" : [3 , 1 , 2 ], "b" : [0 , 0 , 0 ], "c" : [0 , 1 , 2 ], "d" : list ("abc" )}
258+ )
259+ result = df .set_index (list ("abc" )).sort_index (level = list ("ba" ), key = lambda x : x [0 ])
260+
261+ expected = DataFrame (
262+ {"a" : [1 , 2 , 3 ], "b" : [0 , 0 , 0 ], "c" : [1 , 2 , 0 ], "d" : list ("bca" )}
263+ )
264+ expected = expected .set_index (list ("abc" ))
265+ tm .assert_frame_equal (result , expected )
266+
267+ result = df .set_index (list ("abc" )).sort_index (level = list ("ba" ), key = lambda x : x [2 ])
268+ expected = df .set_index (list ("abc" ))
269+ tm .assert_frame_equal (result , expected )
270+
250271 def test_stable_categorial (self ):
251272 # GH 16793
252273 df = DataFrame ({"x" : pd .Categorical (np .repeat ([1 , 2 , 3 , 4 ], 5 ), ordered = True )})
@@ -626,6 +647,13 @@ def test_sort_value_key_nan(self):
626647 expected = df .sort_values (1 , key = str .lower , ascending = False )
627648 assert_frame_equal (result , expected )
628649
650+ @pytest .mark .parametrize ('key' , [None , lambda x : x ])
651+ def test_sort_value_key_empty (self , key ):
652+ df = DataFrame (np .array ([]))
653+
654+ df .sort_values (0 , key = key )
655+ df .sort_index (key = key )
656+
629657 def test_sort_index (self ):
630658 # GH13496
631659
0 commit comments