Skip to content

Commit a6c9458

Browse files
committed
BUG: fixed index power operation
* The power operation on a range of indexes was fixed. See issue #14973
1 parent eecfa88 commit a6c9458

File tree

3 files changed

+19
-1
lines changed

3 files changed

+19
-1
lines changed

doc/source/whatsnew/v0.20.0.txt

+1
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,7 @@ Performance Improvements
282282
Bug Fixes
283283
~~~~~~~~~
284284

285+
- Bug in ``Indexes`` Power numerical operations did not operate correctly (:issue:`14973`)
285286
- Bug in ``TimedeltaIndex`` addition where overflow was being allowed without error (:issue:`14816`)
286287
- Bug in ``DataFrame`` construction in which unsigned 64-bit integer elements were being converted to objects (:issue:`14881`)
287288
- Bug in ``astype()`` where ``inf`` values were incorrectly converted to integers. Now raises error now with ``astype()`` for Series and DataFrames (:issue:`14265`)

pandas/indexes/base.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -3534,7 +3534,9 @@ def _evaluate_numeric_binop(self, other):
35343534
operator.sub, '__sub__', reversed=True)
35353535
cls.__mul__ = cls.__rmul__ = _make_evaluate_binop(
35363536
operator.mul, '__mul__')
3537-
cls.__pow__ = cls.__rpow__ = _make_evaluate_binop(
3537+
cls.__rpow__ = _make_evaluate_binop(
3538+
operator.pow, '__pow__', reversed=True)
3539+
cls.__pow__ = _make_evaluate_binop(
35383540
operator.pow, '__pow__')
35393541
cls.__mod__ = _make_evaluate_binop(
35403542
operator.mod, '__mod__')

pandas/tests/indexes/test_numeric.py

+15
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,21 @@ def test_numeric_compat(self):
105105
for r, e in zip(result, expected):
106106
tm.assert_index_equal(r, e)
107107

108+
#test power calculations both ways
109+
num_range = np.arange(1,11)
110+
pow_range = 2.0**num_range
111+
idxs = pd.Float64Index(range(1, 11))
112+
113+
expected_pow_values = pd.Float64Index(pow_range)
114+
actual_pow_values = 2.0**idxs
115+
tm.assert_index_equal(expected_pow_values, actual_pow_values)
116+
117+
pow_range_rev = num_range**2.0
118+
expected_rev_pow_values = pd.Float64Index(pow_range_rev)
119+
actual_rev_pow_values = idxs**2.0
120+
tm.assert_index_equal(expected_rev_pow_values, actual_rev_pow_values)
121+
122+
108123
def test_explicit_conversions(self):
109124

110125
# GH 8608

0 commit comments

Comments
 (0)