Skip to content

Commit b53a718

Browse files
Backport PR #31511 on branch 1.0.x (BUG: fix reindexing with a tz-aware index and method='nearest') (#32150)
1 parent 6fcc6c3 commit b53a718

File tree

3 files changed

+16
-3
lines changed

3 files changed

+16
-3
lines changed

doc/source/whatsnew/v1.0.2.rst

+4
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ Fixed regressions
3030
Bug fixes
3131
~~~~~~~~~
3232

33+
**Datetimelike**
34+
35+
- Bug in :meth:`DataFrame.reindex` and :meth:`Series.reindex` when reindexing with a tz-aware index (:issue:`26683`)
36+
3337
**Categorical**
3438

3539
- Fixed bug where :meth:`Categorical.from_codes` improperly raised a ``ValueError`` when passed nullable integer codes. (:issue:`31779`)

pandas/core/indexes/base.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -2817,9 +2817,8 @@ def _get_nearest_indexer(self, target, limit, tolerance):
28172817
left_indexer = self.get_indexer(target, "pad", limit=limit)
28182818
right_indexer = self.get_indexer(target, "backfill", limit=limit)
28192819

2820-
target = np.asarray(target)
2821-
left_distances = abs(self.values[left_indexer] - target)
2822-
right_distances = abs(self.values[right_indexer] - target)
2820+
left_distances = np.abs(self[left_indexer] - target)
2821+
right_distances = np.abs(self[right_indexer] - target)
28232822

28242823
op = operator.lt if self.is_monotonic_increasing else operator.le
28252824
indexer = np.where(

pandas/tests/frame/indexing/test_indexing.py

+10
Original file line numberDiff line numberDiff line change
@@ -1608,6 +1608,16 @@ def test_reindex_methods_nearest_special(self):
16081608
actual = df.reindex(target, method="nearest", tolerance=[0.5, 0.01, 0.4, 0.1])
16091609
tm.assert_frame_equal(expected, actual)
16101610

1611+
def test_reindex_nearest_tz(self, tz_aware_fixture):
1612+
# GH26683
1613+
tz = tz_aware_fixture
1614+
idx = pd.date_range("2019-01-01", periods=5, tz=tz)
1615+
df = pd.DataFrame({"x": list(range(5))}, index=idx)
1616+
1617+
expected = df.head(3)
1618+
actual = df.reindex(idx[:3], method="nearest")
1619+
tm.assert_frame_equal(expected, actual)
1620+
16111621
def test_reindex_frame_add_nat(self):
16121622
rng = date_range("1/1/2000 00:00:00", periods=10, freq="10s")
16131623
df = DataFrame({"A": np.random.randn(len(rng)), "B": rng})

0 commit comments

Comments
 (0)