BUG: IntervalIndex scalar lookup raises for included right endpoints when sorted decreasing. · Issue #16417 · pandas-dev/pandas (original) (raw)
Code Sample, a copy-pastable example if possible
Series definition
ivs = [pd.Interval(10, 12), pd.Interval(7, 9), pd.Interval(4, 6), pd.Interval(1, 3)] s = pd.Series(['foo', 'bar', 'baz', 'qux'], pd.IntervalIndex(ivs))
(10, 12] foo (7, 9] bar (4, 6] baz (1, 3] qux dtype: object
Scalar lookup of included right endpoint raises a KeyError.
s[12] KeyError: 12
Problem description
The right endpoint is included in the interval (10, 12]
, so a KeyError
should not be raised for s[12]
. This occurs for all endpoints (12, 9, 6, 3) in the example above. Using loc
also raises.
This issue only occurs when the intervals are sorted decreasing; the lookup is successful for any other permutation of the interval order, e.g. [pd.Interval(7, 9), pd.Interval(10, 12), pd.Interval(4, 6), pd.Interval(1, 3)]
. It also only occurs for right endpoints (closed='right'
or closed='both'
); when the left endpoints are included (closed='left'
or closed='both'
) the lookup is successful for all left endpoints for any ordering of the intervals.
This seems similar to #16410, but I don't know that it's an exact dupe.
Expected Output
Successful lookup
Output of pd.show_versions()
INSTALLED VERSIONS
commit: None
python: 3.5.2.final.0
python-bits: 64
OS: Windows
OS-release: 10
machine: AMD64
processor: Intel64 Family 6 Model 78 Stepping 3, GenuineIntel
byteorder: little
LC_ALL: None
LANG: None
LOCALE: None.None
pandas: 0.20.1
pytest: 3.0.7
pip: 9.0.1
setuptools: 34.4.1
Cython: 0.25.2
numpy: 1.13.0rc2
scipy: 0.18.1
xarray: 0.9.5
IPython: 5.3.0
sphinx: None
patsy: 0.4.1
dateutil: 2.6.0
pytz: 2017.2
blosc: 1.4.4
bottleneck: 1.2.0
tables: 3.4.2
numexpr: 2.6.1
feather: None
matplotlib: 2.0.2
openpyxl: 2.4.0
xlrd: 1.0.0
xlwt: None
xlsxwriter: None
lxml: 3.7.3
bs4: None
html5lib: None
sqlalchemy: 1.1.10
pymysql: None
psycopg2: None
jinja2: 2.9.6
s3fs: None
pandas_gbq: 0.1.6
pandas_datareader: 0.4.0