@@ -21,75 +21,68 @@ class TestDataFrameSorting(tm.TestCase, TestData):
21
21
22
22
_multiprocess_can_split_ = True
23
23
24
- def test_sort_values (self ):
25
- # API for 9816
24
+ def test_sort_index (self ):
25
+ # GH13496
26
26
27
- # sort_index
28
27
frame = DataFrame (np .arange (16 ).reshape (4 , 4 ), index = [1 , 2 , 3 , 4 ],
29
28
columns = ['A' , 'B' , 'C' , 'D' ])
30
29
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
37
31
unordered = frame .ix [[3 , 2 , 4 , 1 ]]
38
- expected = unordered .sort_index ()
39
-
40
32
result = unordered .sort_index (axis = 0 )
33
+ expected = frame
41
34
assert_frame_equal (result , expected )
42
35
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 )
45
39
40
+ # axis=1 : sort columns by column names
41
+ unordered = frame .ix [:, [2 , 1 , 3 , 0 ]]
46
42
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 ]
48
47
assert_frame_equal (result , expected )
49
48
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' ))
52
54
df = DataFrame ([[1 , 2 ], [3 , 4 ]], mi )
53
55
54
56
result = df .sort_index (level = 'A' , sort_remaining = False )
55
57
expected = df .sortlevel ('A' , sort_remaining = False )
56
58
assert_frame_equal (result , expected )
57
59
60
+ # sort columns by specified level of multi-index
58
61
df = df .T
59
62
result = df .sort_index (level = 'A' , axis = 1 , sort_remaining = False )
60
63
expected = df .sortlevel ('A' , axis = 1 , sort_remaining = False )
61
64
assert_frame_equal (result , expected )
62
65
63
- # MI sort, but no by
66
+ # MI sort, but no level: sort_level has no effect
64
67
mi = MultiIndex .from_tuples ([[1 , 1 , 3 ], [1 , 1 , 1 ]], names = list ('ABC' ))
65
68
df = DataFrame ([[1 , 2 ], [3 , 4 ]], mi )
66
69
result = df .sort_index (sort_remaining = False )
67
70
expected = df .sort_index ()
68
71
assert_frame_equal (result , expected )
69
72
70
- def test_sort_index (self ):
73
+ def test_sort (self ):
71
74
frame = DataFrame (np .arange (16 ).reshape (4 , 4 ), index = [1 , 2 , 3 , 4 ],
72
75
columns = ['A' , 'B' , 'C' , 'D' ])
73
76
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 ()
89
82
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' ) )
93
86
94
87
# by column
95
88
sorted_df = frame .sort_values (by = 'A' )
@@ -109,16 +102,17 @@ def test_sort_index(self):
109
102
sorted_df = frame .sort_values (by = ['A' ], ascending = [False ])
110
103
assert_frame_equal (sorted_df , expected )
111
104
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 ]]
116
108
assert_frame_equal (sorted_df , expected )
117
109
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 )
120
111
assert_frame_equal (sorted_df , expected [::- 1 ])
121
112
113
+ sorted_df = frame .sort_values (by = ['B' , 'A' ], ascending = [True , False ])
114
+ assert_frame_equal (sorted_df , expected )
115
+
122
116
self .assertRaises (ValueError , lambda : frame .sort_values (
123
117
by = ['A' , 'B' ], axis = 2 , inplace = True ))
124
118
@@ -130,6 +124,25 @@ def test_sort_index(self):
130
124
with assertRaisesRegexp (ValueError , msg ):
131
125
frame .sort_values (by = ['A' , 'B' ], axis = 0 , ascending = [True ] * 5 )
132
126
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
+
133
146
def test_sort_index_categorical_index (self ):
134
147
135
148
df = (DataFrame ({'A' : np .arange (6 , dtype = 'int64' ),
@@ -361,25 +374,6 @@ def test_sort_index_different_sortorder(self):
361
374
result = idf ['C' ].sort_index (ascending = [1 , 0 ])
362
375
assert_series_equal (result , expected ['C' ])
363
376
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
-
383
377
def test_sort_index_duplicates (self ):
384
378
385
379
# with 9816, these are all translated to .sort_values
0 commit comments