@@ -83,29 +83,33 @@ def test_sort_values(self):
83
83
with pytest .raises (ValueError , match = msg ):
84
84
frame .sort_values (by = ["A" , "B" ], axis = 0 , ascending = [True ] * 5 )
85
85
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 ):
87
91
frame = DataFrame (
88
92
np .random .randn (4 , 4 ), index = [1 , 2 , 3 , 4 ], columns = ["A" , "B" , "C" , "D" ]
89
93
)
90
94
91
95
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 )
94
98
assert_frame_equal (sorted_df , expected )
95
99
96
100
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 )
99
103
assert_frame_equal (sorted_df , expected )
100
104
101
105
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 )
104
108
assert_frame_equal (sorted_df , expected )
105
109
106
110
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 )
109
113
assert_frame_equal (sorted_df , expected )
110
114
111
115
def test_sort_nan (self ):
@@ -249,6 +253,23 @@ def test_sort_multi_index(self):
249
253
250
254
tm .assert_frame_equal (result , expected )
251
255
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
+
252
273
def test_stable_categorial (self ):
253
274
# GH 16793
254
275
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):
628
649
expected = df .sort_values (1 , key = str .lower , ascending = False )
629
650
assert_frame_equal (result , expected )
630
651
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
+
631
659
def test_sort_index (self ):
632
660
# GH13496
633
661
0 commit comments