@@ -81,30 +81,34 @@ def test_sort_values(self):
81
81
with pytest .raises (ValueError , match = msg ):
82
82
frame .sort_values (by = ["A" , "B" ], axis = 0 , ascending = [True ] * 5 )
83
83
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 ):
85
89
frame = DataFrame (
86
90
np .random .randn (4 , 4 ), index = [1 , 2 , 3 , 4 ], columns = ["A" , "B" , "C" , "D" ]
87
91
)
88
92
89
93
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 )
93
97
94
98
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 )
98
102
99
103
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 )
103
107
104
108
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 )
108
112
109
113
def test_sort_nan (self ):
110
114
# GH3917
@@ -247,6 +251,23 @@ def test_sort_multi_index(self):
247
251
248
252
tm .assert_frame_equal (result , expected )
249
253
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
+
250
271
def test_stable_categorial (self ):
251
272
# GH 16793
252
273
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):
626
647
expected = df .sort_values (1 , key = str .lower , ascending = False )
627
648
assert_frame_equal (result , expected )
628
649
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
+
629
657
def test_sort_index (self ):
630
658
# GH13496
631
659
0 commit comments