From 8a1b004e40679297c3f5743ff32ed4274f7acdfa Mon Sep 17 00:00:00 2001 From: RoeiRaz Date: Sun, 25 Aug 2019 06:01:19 +0300 Subject: [PATCH 1/5] BUG: adds test for GH26939 --- pandas/tests/indexing/test_loc.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/pandas/tests/indexing/test_loc.py b/pandas/tests/indexing/test_loc.py index abe0cd86c90d7..383771b87ca75 100644 --- a/pandas/tests/indexing/test_loc.py +++ b/pandas/tests/indexing/test_loc.py @@ -1070,6 +1070,16 @@ def test_series_indexing_zerodim_np_array(self): result = s.loc[np.array(0)] assert result == 1 + def test_loc_reverse_assignment(self): + # GH26939 + data = [1, 2, 3, 4, 5, 6] + [None] * 4 + expected = Series(index=range(2010, 2020), data=data) + + result = pd.Series(index=range(2010, 2020)) + result.loc[2015:2010:-1] = [6, 5, 4, 3, 2, 1] + + tm.assert_series_equal(result, expected) + def test_series_loc_getitem_label_list_missing_values(): # gh-11428 From a41b96451237b366960fc88b4d6ba0d0aa3e181b Mon Sep 17 00:00:00 2001 From: RoeiRaz Date: Sun, 25 Aug 2019 06:03:12 +0300 Subject: [PATCH 2/5] BUG: fixes GH26939 --- pandas/core/indexers.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pandas/core/indexers.py b/pandas/core/indexers.py index 70c48e969172f..6502d566e88c0 100644 --- a/pandas/core/indexers.py +++ b/pandas/core/indexers.py @@ -226,6 +226,9 @@ def length_of_indexer(indexer, target=None) -> int: if step is None: step = 1 elif step < 0: + t = stop + stop = start + 1 + start = t + 1 step = -step return (stop - start + step - 1) // step elif isinstance(indexer, (ABCSeries, ABCIndexClass, np.ndarray, list)): From 9a93e8e51e61da527903096ec81355e277755eeb Mon Sep 17 00:00:00 2001 From: "Roei.r" Date: Sun, 25 Aug 2019 15:54:03 +0300 Subject: [PATCH 3/5] Update indexers.py --- pandas/core/indexers.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pandas/core/indexers.py b/pandas/core/indexers.py index 6502d566e88c0..433bca940c028 100644 --- a/pandas/core/indexers.py +++ b/pandas/core/indexers.py @@ -226,9 +226,7 @@ def length_of_indexer(indexer, target=None) -> int: if step is None: step = 1 elif step < 0: - t = stop - stop = start + 1 - start = t + 1 + start, stop = stop + 1, start + 1 step = -step return (stop - start + step - 1) // step elif isinstance(indexer, (ABCSeries, ABCIndexClass, np.ndarray, list)): From 467d9fefd6403ada8f67953cfbc7d601bb23c244 Mon Sep 17 00:00:00 2001 From: "Roei.r" Date: Tue, 27 Aug 2019 23:03:11 +0300 Subject: [PATCH 4/5] Update test_loc.py --- pandas/tests/indexing/test_loc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/tests/indexing/test_loc.py b/pandas/tests/indexing/test_loc.py index 383771b87ca75..9845b1ac3a4b9 100644 --- a/pandas/tests/indexing/test_loc.py +++ b/pandas/tests/indexing/test_loc.py @@ -1073,7 +1073,7 @@ def test_series_indexing_zerodim_np_array(self): def test_loc_reverse_assignment(self): # GH26939 data = [1, 2, 3, 4, 5, 6] + [None] * 4 - expected = Series(index=range(2010, 2020), data=data) + expected = Series(data, index=range(2010, 2020)) result = pd.Series(index=range(2010, 2020)) result.loc[2015:2010:-1] = [6, 5, 4, 3, 2, 1] From 94bf51e414cf97adbe4d9fb1bfce86acdf62c5c1 Mon Sep 17 00:00:00 2001 From: "Roei.r" Date: Wed, 28 Aug 2019 23:09:32 +0300 Subject: [PATCH 5/5] Update v1.0.0.rst --- doc/source/whatsnew/v1.0.0.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/whatsnew/v1.0.0.rst b/doc/source/whatsnew/v1.0.0.rst index 8e25857e5ad69..ce0910ab9498e 100644 --- a/doc/source/whatsnew/v1.0.0.rst +++ b/doc/source/whatsnew/v1.0.0.rst @@ -140,7 +140,7 @@ Interval Indexing ^^^^^^^^ -- +- Bug in assignment using a reverse slicer (:issue:`26939`) - Missing