123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- import numpy as np
- import pandas as pd
- from pandas import (
- CategoricalIndex,
- Index,
- MultiIndex,
- Timestamp,
- date_range,
- )
- import pandas._testing as tm
- class TestGetLevelValues:
- def test_get_level_values_box_datetime64(self):
- dates = date_range("1/1/2000", periods=4)
- levels = [dates, [0, 1]]
- codes = [[0, 0, 1, 1, 2, 2, 3, 3], [0, 1, 0, 1, 0, 1, 0, 1]]
- index = MultiIndex(levels=levels, codes=codes)
- assert isinstance(index.get_level_values(0)[0], Timestamp)
- def test_get_level_values(idx):
- result = idx.get_level_values(0)
- expected = Index(["foo", "foo", "bar", "baz", "qux", "qux"], name="first")
- tm.assert_index_equal(result, expected)
- assert result.name == "first"
- result = idx.get_level_values("first")
- expected = idx.get_level_values(0)
- tm.assert_index_equal(result, expected)
- # GH 10460
- index = MultiIndex(
- levels=[CategoricalIndex(["A", "B"]), CategoricalIndex([1, 2, 3])],
- codes=[np.array([0, 0, 0, 1, 1, 1]), np.array([0, 1, 2, 0, 1, 2])],
- )
- exp = CategoricalIndex(["A", "A", "A", "B", "B", "B"])
- tm.assert_index_equal(index.get_level_values(0), exp)
- exp = CategoricalIndex([1, 2, 3, 1, 2, 3])
- tm.assert_index_equal(index.get_level_values(1), exp)
- def test_get_level_values_all_na():
- # GH#17924 when level entirely consists of nan
- arrays = [[np.nan, np.nan, np.nan], ["a", np.nan, 1]]
- index = MultiIndex.from_arrays(arrays)
- result = index.get_level_values(0)
- expected = Index([np.nan, np.nan, np.nan], dtype=np.float64)
- tm.assert_index_equal(result, expected)
- result = index.get_level_values(1)
- expected = Index(["a", np.nan, 1], dtype=object)
- tm.assert_index_equal(result, expected)
- def test_get_level_values_int_with_na():
- # GH#17924
- arrays = [["a", "b", "b"], [1, np.nan, 2]]
- index = MultiIndex.from_arrays(arrays)
- result = index.get_level_values(1)
- expected = Index([1, np.nan, 2])
- tm.assert_index_equal(result, expected)
- arrays = [["a", "b", "b"], [np.nan, np.nan, 2]]
- index = MultiIndex.from_arrays(arrays)
- result = index.get_level_values(1)
- expected = Index([np.nan, np.nan, 2])
- tm.assert_index_equal(result, expected)
- def test_get_level_values_na():
- arrays = [[np.nan, np.nan, np.nan], ["a", np.nan, 1]]
- index = MultiIndex.from_arrays(arrays)
- result = index.get_level_values(0)
- expected = Index([np.nan, np.nan, np.nan])
- tm.assert_index_equal(result, expected)
- result = index.get_level_values(1)
- expected = Index(["a", np.nan, 1])
- tm.assert_index_equal(result, expected)
- arrays = [["a", "b", "b"], pd.DatetimeIndex([0, 1, pd.NaT])]
- index = MultiIndex.from_arrays(arrays)
- result = index.get_level_values(1)
- expected = pd.DatetimeIndex([0, 1, pd.NaT])
- tm.assert_index_equal(result, expected)
- arrays = [[], []]
- index = MultiIndex.from_arrays(arrays)
- result = index.get_level_values(0)
- expected = Index([], dtype=object)
- tm.assert_index_equal(result, expected)
- def test_get_level_values_when_periods():
- # GH33131. See also discussion in GH32669.
- # This test can probably be removed when PeriodIndex._engine is removed.
- from pandas import (
- Period,
- PeriodIndex,
- )
- idx = MultiIndex.from_arrays(
- [PeriodIndex([Period("2019Q1"), Period("2019Q2")], name="b")]
- )
- idx2 = MultiIndex.from_arrays(
- [idx._get_level_values(level) for level in range(idx.nlevels)]
- )
- assert all(x.is_monotonic_increasing for x in idx2.levels)
- def test_values_loses_freq_of_underlying_index():
- # GH#49054
- idx = pd.DatetimeIndex(date_range("20200101", periods=3, freq="BM"))
- expected = idx.copy(deep=True)
- idx2 = Index([1, 2, 3])
- midx = MultiIndex(levels=[idx, idx2], codes=[[0, 1, 2], [0, 1, 2]])
- midx.values
- assert idx.freq is not None
- tm.assert_index_equal(idx, expected)
|