@@ -83,29 +83,33 @@ def test_sort_values(self):
8383 with pytest .raises (ValueError , match = msg ):
8484 frame .sort_values (by = ["A" , "B" ], axis = 0 , ascending = [True ] * 5 )
8585
86- def test_sort_values_inplace (self ):
86+ @pytest .fixture (params = [None , lambda x : x ])
87+ def key (self , request ):
88+ return request .param
89+
90+ def test_sort_values_inplace (self , key ):
8791 frame = DataFrame (
8892 np .random .randn (4 , 4 ), index = [1 , 2 , 3 , 4 ], columns = ["A" , "B" , "C" , "D" ]
8993 )
9094
9195 sorted_df = frame .copy ()
92- sorted_df .sort_values (by = "A" , inplace = True )
93- expected = frame .sort_values (by = "A" )
96+ sorted_df .sort_values (by = "A" , inplace = True , key = key )
97+ expected = frame .sort_values (by = "A" , key = key )
9498 assert_frame_equal (sorted_df , expected )
9599
96100 sorted_df = frame .copy ()
97- sorted_df .sort_values (by = 1 , axis = 1 , inplace = True )
98- expected = frame .sort_values (by = 1 , axis = 1 )
101+ sorted_df .sort_values (by = 1 , axis = 1 , inplace = True , key = key )
102+ expected = frame .sort_values (by = 1 , axis = 1 , key = key )
99103 assert_frame_equal (sorted_df , expected )
100104
101105 sorted_df = frame .copy ()
102- sorted_df .sort_values (by = "A" , ascending = False , inplace = True )
103- expected = frame .sort_values (by = "A" , ascending = False )
106+ sorted_df .sort_values (by = "A" , ascending = False , inplace = True , key = key )
107+ expected = frame .sort_values (by = "A" , ascending = False , key = key )
104108 assert_frame_equal (sorted_df , expected )
105109
106110 sorted_df = frame .copy ()
107- sorted_df .sort_values (by = ["A" , "B" ], ascending = False , inplace = True )
108- expected = frame .sort_values (by = ["A" , "B" ], ascending = False )
111+ sorted_df .sort_values (by = ["A" , "B" ], ascending = False , inplace = True , key = key )
112+ expected = frame .sort_values (by = ["A" , "B" ], ascending = False , key = key )
109113 assert_frame_equal (sorted_df , expected )
110114
111115 def test_sort_nan (self ):
@@ -249,6 +253,23 @@ def test_sort_multi_index(self):
249253
250254 tm .assert_frame_equal (result , expected )
251255
256+ def test_sort_multi_index_key (self ):
257+ # GH 25775, testing that sorting by index works with a multi-index.
258+ df = DataFrame (
259+ {"a" : [3 , 1 , 2 ], "b" : [0 , 0 , 0 ], "c" : [0 , 1 , 2 ], "d" : list ("abc" )}
260+ )
261+ result = df .set_index (list ("abc" )).sort_index (level = list ("ba" ), key = lambda x : x [0 ])
262+
263+ expected = DataFrame (
264+ {"a" : [1 , 2 , 3 ], "b" : [0 , 0 , 0 ], "c" : [1 , 2 , 0 ], "d" : list ("bca" )}
265+ )
266+ expected = expected .set_index (list ("abc" ))
267+ tm .assert_frame_equal (result , expected )
268+
269+ result = df .set_index (list ("abc" )).sort_index (level = list ("ba" ), key = lambda x : x [2 ])
270+ expected = df .set_index (list ("abc" ))
271+ tm .assert_frame_equal (result , expected )
272+
252273 def test_stable_categorial (self ):
253274 # GH 16793
254275 df = DataFrame ({"x" : pd .Categorical (np .repeat ([1 , 2 , 3 , 4 ], 5 ), ordered = True )})
@@ -628,6 +649,13 @@ def test_sort_value_key_nan(self):
628649 expected = df .sort_values (1 , key = str .lower , ascending = False )
629650 assert_frame_equal (result , expected )
630651
652+ @pytest .mark .parametrize ('key' , [None , lambda x : x ])
653+ def test_sort_value_key_empty (self , key ):
654+ df = DataFrame (np .array ([]))
655+
656+ df .sort_values (0 , key = key )
657+ df .sort_index (key = key )
658+
631659 def test_sort_index (self ):
632660 # GH13496
633661
0 commit comments