8000 DEPR: deprecate sortlevel in favor of sort_index (#15099) · pandas-dev/pandas@b8e7c34 · GitHub
[go: up one dir, main page]

Skip to content

Commit b8e7c34

Browse files
jrebackjorisvandenbossche
authored andcommitted
DEPR: deprecate sortlevel in favor of sort_index (#15099)
xref #14279
1 parent 6efb86c commit b8e7c34

22 files changed

+88
-94
lines changed

doc/source/api.rst

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -418,7 +418,6 @@ Reshaping, sorting
418418
Series.reorder_levels
419419
Series.sort_values
420420
Series.sort_index
421-
Series.sortlevel
422421
Series.swaplevel
423422
Series.unstack
424423
Series.searchsorted
@@ -931,7 +930,6 @@ Reshaping, sorting, transposing
931930
DataFrame.reorder_levels
932931
DataFrame.sort_values
933932
DataFrame.sort_index
934-
DataFrame.sortlevel
935933
DataFrame.nlargest
936934
DataFrame.nsmallest
937935
DataFrame.swaplevel

doc/source/whatsnew/v0.20.0.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ Deprecations
261261
- ``Categorical.searchsorted()`` and ``Series.searchsorted()`` have deprecated the ``v`` parameter in favor of ``value`` (:issue:`12662`)
262262
- ``TimedeltaIndex.searchsorted()``, ``DatetimeIndex.searchsorted()``, and ``PeriodIndex.searchsorted()`` have deprecated the ``key`` parameter in favor of ``value`` (:issue:`12662`)
263263
- ``DataFrame.astype()`` has deprecated the ``raise_on_error`` parameter in favor of ``errors`` (:issue:`14878`)
264-
264+
- ``Series.sortlevel`` and ``DataFrame.sortlevel`` have been deprecated in favor of ``Series.sort_index`` and ``DataFrame.sort_index`` (:issue:`15099`)
265265

266266

267267
.. _whatsnew_0200.prior_deprecations:

pandas/core/frame.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1274,7 +1274,7 @@ def to_panel(self):
12741274

12751275
# minor axis must be sorted
12761276
if self.index.lexsort_depth < 2:
1277-
selfsorted = self.sortlevel(0)
1277+
selfsorted = self.sort_index(level=0)
12781278
else:
12791279
selfsorted = self
12801280

@@ -3337,6 +3337,8 @@ def sort_index(self, axis=0, level=None, ascending=True, inplace=False,
33373337
def sortlevel(self, level=0, axis=0, ascending=True, inplace=False,
33383338
sort_remaining=True):
33393339
"""
3340+
DEPRECATED: use :meth:`DataFrame.sort_index`
3341+
33403342
Sort multilevel index by chosen axis and primary level. Data will be
33413343
lexicographically sorted by the chosen level followed by the other
33423344
levels (in order)
@@ -3360,6 +3362,8 @@ def sortlevel(self, level=0, axis=0, ascending=True, inplace=False,
33603362
DataFrame.sort_index(level=...)
33613363
33623364
"""
3365+
warnings.warn("sortlevel is deprecated, use sort_index(level= ...)",
3366+
FutureWarning, stacklevel=2)
33633367
return self.sort_index(level=level, axis=axis, ascending=ascending,
33643368
inplace=inplace, sort_remaining=sort_remaining)
33653369

pandas/core/reshape.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,7 @@ def pivot_simple(index, columns, values):
375375

376376
hindex = MultiIndex.from_arrays([index, columns])
377377
series = Series(values.ravel(), index=hindex)
378-
series = series.sortlevel(0)
378+
series = series.sort_index(level=0)
379379
return series.unstack()
380380

381381

@@ -596,7 +596,7 @@ def _convert_level_number(level_num, columns):
596596
# which interferes with trying to sort based on the first
597597
# level
598598
level_to_sort = _convert_level_number(0, this.columns)
599-
this = this.sortlevel(level_to_sort, axis=1)
599+
this = this.sort_index(level=level_to_sort, axis=1)
600600

601601
# tuple list excluding level for grouping columns
602602
if len(frame.columns.levels) > 2:

pandas/core/series.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1988,6 +1988,8 @@ def nsmallest(self, n=5, keep='first'):
19881988

19891989
def sortlevel(self, level=0, ascending=True, sort_remaining=True):
19901990
"""
1991+
DEPRECATED: use :meth:`Series.sort_index`
1992+
19911993
Sort Series with MultiIndex by chosen level. Data will be
19921994
lexicographically sorted by the chosen level followed by the other
19931995
levels (in order)
@@ -2006,6 +2008,8 @@ def sortlevel(self, level=0, ascending=True, sort_remaining=True):
20062008
Series.sort_index(level=...)
20072009
20082010
"""
2011+
warnings.warn("sortlevel is deprecated, use sort_index(level=...)",
2012+
FutureWarning, stacklevel=2)
20092013
return self.sort_index(level=level, ascending=ascending,
20102014
sort_remaining=sort_remaining)
20112015

pandas/sparse/frame.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -816,7 +816,7 @@ def stack_sparse_frame(frame):
816816

817817
lp = DataFrame(stacked_values.reshape((nobs, 1)), index=index,
818818
columns=['foo'])
819-
return lp.sortlevel(level=0)
819+
return lp.sort_index(level=0)
820820

821821

822822
def homogenize(series_dict):

pandas/sparse/tests/test_series.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -947,7 +947,7 @@ def setUp(self):
947947
micol = pd.MultiIndex.from_product(
948948
[['a', 'b', 'c'], ["1", "2"]], names=['col-foo', 'col-bar'])
949949
dense_multiindex_frame = pd.DataFrame(
950-
index=miindex, columns=micol).sortlevel().sortlevel(axis=1)
950+
index=miindex, columns=micol).sort_index().sort_index(axis=1)
951951
self.dense_multiindex_frame = dense_multiindex_frame.fillna(value=3.14)
952952

953953
def test_to_sparse_preserve_multiindex_names_columns(self):

pandas/stats/plm.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -792,8 +792,8 @@ def _var_beta_panel(y, x, beta, xx, rmse, cluster_axis,
792792
resid = DataFrame(yv[:, None] - Xb, index=y.index, columns=['resid'])
793793

794794
if cluster_axis == 1:
795-
x = x.swaplevel(0, 1).sortlevel(0)
796-
resid = resid.swaplevel(0, 1).sortlevel(0)
795+
x = x.swaplevel(0, 1).sort_index(level=0)
796+
resid = resid.swaplevel(0, 1).sort_index(level=0)
797797

798798
m = _group_agg(x.values * resid.values, x.index._bounds,
799799
lambda x: np.sum(x, axis=0))

pandas/tests/frame/test_misc_api.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -456,10 +456,6 @@ def _check_f(base, f):
456456
f = lambda x: x.sort_index(inplace=True)
457457
_check_f(data.copy(), f)
458458

459-
# sortlevel
460-
f = lambda x: x.sortlevel(0, inplace=True)
461-
_check_f(data.set_index(['a', 'b']), f)
462-
463459
# fillna
464460
f = lambda x: x.fillna(0, inplace=True)
465461
_check_f(data.copy(), f)

pandas/tests/frame/test_operators.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,7 @@ def test_binary_ops_align(self):
467467

468468
df = DataFrame(np.arange(27 * 3).reshape(27, 3),
469469
index=index,
470-
columns=['value1', 'value2', 'value3']).sortlevel()
470+
columns=['value1', 'value2', 'value3']).sort_index()
471471

472472
idx = pd.IndexSlice
473473
for op in ['add', 'sub', 'mul', 'div', 'truediv']:
@@ -479,15 +479,15 @@ def test_binary_ops_align(self):
479479
result = getattr(df, op)(x, level='third', axis=0)
480480

481481
expected = pd.concat([opa(df.loc[idx[:, :, i], :], v)
482-
for i, v in x.iteritems()]).sortlevel()
482+
for i, v in x.iteritems()]).sort_index()
483483
assert_frame_equal(result, expected)
484484

485485
x = Series([1.0, 10.0], ['two', 'three'])
486486
result = getattr(df, op)(x, level='second', axis=0)
487487

488488
expected = (pd.concat([opa(df.loc[idx[:, i], :], v)
489489
for i, v in x.iteritems()])
490-
.reindex_like(df).sortlevel())
490+
.reindex_like(df).sort_index())
491491
assert_frame_equal(result, expected)
492492

493493
# GH9463 (alignment level of dataframe with series)

0 commit comments

Comments
 (0)
0