Skip to content

Commit a91194e

Browse files
jbrockmendeljreback
authored andcommitted
DEPR: DataFrame.sort_index by keyword (#29931)
1 parent 273dd40 commit a91194e

File tree

3 files changed

+1
-80
lines changed

3 files changed

+1
-80
lines changed

doc/source/whatsnew/v1.0.0.rst

+1
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,7 @@ or ``matplotlib.Axes.plot``. See :ref:`plotting.formatters` for more.
409409
- Removed the previously deprecated :meth:`Series.get_value`, :meth:`Series.set_value`, :meth:`DataFrame.get_value`, :meth:`DataFrame.set_value` (:issue:`17739`)
410410
- Changed the the default value of `inplace` in :meth:`DataFrame.set_index` and :meth:`Series.set_axis`. It now defaults to False (:issue:`27600`)
411411
- Removed the previously deprecated :attr:`Series.cat.categorical`, :attr:`Series.cat.index`, :attr:`Series.cat.name` (:issue:`24751`)
412+
- Removed the previously deprecated "by" keyword from :meth:`DataFrame.sort_index`, use :meth:`DataFrame.sort_values` instead (:issue:`10726`)
412413
- Removed support for nested renaming in :meth:`DataFrame.aggregate`, :meth:`Series.aggregate`, :meth:`DataFrameGroupBy.aggregate`, :meth:`SeriesGroupBy.aggregate`, :meth:`Rolling.aggregate` (:issue:`18529`)
413414
- Passing ``datetime64`` data to :class:`TimedeltaIndex` or ``timedelta64`` data to ``DatetimeIndex`` now raises ``TypeError`` (:issue:`23539`, :issue:`23937`)
414415
- A tuple passed to :meth:`DataFrame.groupby` is now exclusively treated as a single key (:issue:`18314`)

pandas/core/frame.py

-12
Original file line numberDiff line numberDiff line change
@@ -4764,24 +4764,12 @@ def sort_index(
47644764
kind="quicksort",
47654765
na_position="last",
47664766
sort_remaining=True,
4767-
by=None,
47684767
):
47694768

47704769
# TODO: this can be combined with Series.sort_index impl as
47714770
# almost identical
47724771

47734772
inplace = validate_bool_kwarg(inplace, "inplace")
4774-
# 10726
4775-
if by is not None:
4776-
warnings.warn(
4777-
"by argument to sort_index is deprecated, "
4778-
"please use .sort_values(by=...)",
4779-
FutureWarning,
4780-
stacklevel=2,
4781-
)
4782-
if level is not None:
4783-
raise ValueError("unable to simultaneously sort by and level")
4784-
return self.sort_values(by, axis=axis, ascending=ascending, inplace=inplace)
47854773

47864774
axis = self._get_axis_number(axis)
47874775
labels = self._get_axis(axis)

pandas/tests/frame/test_sorting.py

-68
Original file line numberDiff line numberDiff line change
@@ -385,27 +385,18 @@ def test_sort_index_multicolumn(self):
385385
random.shuffle(B)
386386
frame = DataFrame({"A": A, "B": B, "C": np.random.randn(100)})
387387

388-
# use .sort_values #9816
389-
with tm.assert_produces_warning(FutureWarning):
390-
frame.sort_index(by=["A", "B"])
391388
result = frame.sort_values(by=["A", "B"])
392389
indexer = np.lexsort((frame["B"], frame["A"]))
393390
expected = frame.take(indexer)
394391
tm.assert_frame_equal(result, expected)
395392

396-
# use .sort_values #9816
397-
with tm.assert_produces_warning(FutureWarning):
398-
frame.sort_index(by=["A", "B"], ascending=False)
399393
result = frame.sort_values(by=["A", "B"], ascending=False)
400394
indexer = np.lexsort(
401395
(frame["B"].rank(ascending=False), frame["A"].rank(ascending=False))
402396
)
403397
expected = frame.take(indexer)
404398
tm.assert_frame_equal(result, expected)
405399

406-
# use .sort_values #9816
407-
with tm.assert_produces_warning(FutureWarning):
408-
frame.sort_index(by=["B", "A"])
409400
result = frame.sort_values(by=["B", "A"])
410401
indexer = np.lexsort((frame["A"], frame["B"]))
411402
expected = frame.take(indexer)
@@ -452,14 +443,8 @@ def test_sort_index_different_sortorder(self):
452443

453444
df = DataFrame({"A": A, "B": B, "C": np.random.randn(100)})
454445

455-
# use .sort_values #9816
456-
with tm.assert_produces_warning(FutureWarning):
457-
df.sort_index(by=["A", "B"], ascending=[1, 0])
458-
result = df.sort_values(by=["A", "B"], ascending=[1, 0])
459-
460446
ex_indexer = np.lexsort((df.B.max() - df.B, df.A))
461447
expected = df.take(ex_indexer)
462-
tm.assert_frame_equal(result, expected)
463448

464449
# test with multiindex, too
465450
idf = df.set_index(["A", "B"])
@@ -472,59 +457,6 @@ def test_sort_index_different_sortorder(self):
472457
result = idf["C"].sort_index(ascending=[1, 0])
473458
tm.assert_series_equal(result, expected["C"])
474459

475-
def test_sort_index_duplicates(self):
476-
477-
# with 9816, these are all translated to .sort_values
478-
479-
df = DataFrame([range(5, 9), range(4)], columns=["a", "a", "b", "b"])
480-
481-
with pytest.raises(ValueError, match="not unique"):
482-
# use .sort_values #9816
483-
with tm.assert_produces_warning(FutureWarning):
484-
df.sort_index(by="a")
485-
with pytest.raises(ValueError, match="not unique"):
486-
df.sort_values(by="a")
487-
488-
with pytest.raises(ValueError, match="not unique"):
489-
# use .sort_values #9816
490-
with tm.assert_produces_warning(FutureWarning):
491-
df.sort_index(by=["a"])
492-
with pytest.raises(ValueError, match="not unique"):
493-
df.sort_values(by=["a"])
494-
495-
with pytest.raises(ValueError, match="not unique"):
496-
# use .sort_values #9816
497-
with tm.assert_produces_warning(FutureWarning):
498-
# multi-column 'by' is separate codepath
499-
df.sort_index(by=["a", "b"])
500-
with pytest.raises(ValueError, match="not unique"):
501-
# multi-column 'by' is separate codepath
502-
df.sort_values(by=["a", "b"])
503-
504-
# with multi-index
505-
# GH4370
506-
df = DataFrame(
507-
np.random.randn(4, 2), columns=MultiIndex.from_tuples([("a", 0), ("a", 1)])
508-
)
509-
with pytest.raises(ValueError, match="level"):
510-
# use .sort_values #9816
511-
with tm.assert_produces_warning(FutureWarning):
512-
df.sort_index(by="a")
513-
with pytest.raises(ValueError, match="level"):
514-
df.sort_values(by="a")
515-
516-
# convert tuples to a list of tuples
517-
# use .sort_values #9816
518-
with tm.assert_produces_warning(FutureWarning):
519-
df.sort_index(by=[("a", 1)])
520-
expected = df.sort_values(by=[("a", 1)])
521-
522-
# use .sort_values #9816
523-
with tm.assert_produces_warning(FutureWarning):
524-
df.sort_index(by=("a", 1))
525-
result = df.sort_values(by=("a", 1))
526-
tm.assert_frame_equal(result, expected)
527-
528460
def test_sort_index_level(self):
529461
mi = MultiIndex.from_tuples([[1, 1, 3], [1, 1, 1]], names=list("ABC"))
530462
df = DataFrame([[1, 2], [3, 4]], mi)

0 commit comments

Comments
 (0)