@@ -955,19 +955,21 @@ def test_get_level_values(self):
955955 exp = CategoricalIndex ([1 , 2 , 3 , 1 , 2 , 3 ])
956956 tm .assert_index_equal (index .get_level_values (1 ), exp )
957957
958- def test_get_level_values_na (self ):
958+ @pytest .mark .xfail (reason = 'GH 17924 (returns Int64Index with float data)' )
959+ def test_get_level_values_int_with_na (self ):
959960 arrays = [['a' , 'b' , 'b' ], [1 , np .nan , 2 ]]
960961 index = pd .MultiIndex .from_arrays (arrays )
961- values = index .get_level_values (1 )
962- expected = np . array ([1 , np .nan , 2 ])
963- tm .assert_numpy_array_equal ( values . values . astype ( float ) , expected )
962+ result = index .get_level_values (1 )
963+ expected = Index ([1 , np .nan , 2 ])
964+ tm .assert_index_equal ( result , expected )
964965
965966 arrays = [['a' , 'b' , 'b' ], [np .nan , np .nan , 2 ]]
966967 index = pd .MultiIndex .from_arrays (arrays )
967- values = index .get_level_values (1 )
968- expected = np . array ([np .nan , np .nan , 2 ])
969- tm .assert_numpy_array_equal ( values . values . astype ( float ) , expected )
968+ result = index .get_level_values (1 )
969+ expected = Index ([np .nan , np .nan , 2 ])
970+ tm .assert_index_equal ( result , expected )
970971
972+ def test_get_level_values_na (self ):
971973 arrays = [[np .nan , np .nan , np .nan ], ['a' , np .nan , 1 ]]
972974 index = pd .MultiIndex .from_arrays (arrays )
973975 result = index .get_level_values (0 )
@@ -982,7 +984,7 @@ def test_get_level_values_na(self):
982984 index = pd .MultiIndex .from_arrays (arrays )
983985 values = index .get_level_values (1 )
984986 expected = pd .DatetimeIndex ([0 , 1 , pd .NaT ])
985- tm .assert_numpy_array_equal (values . values , expected . values )
987+ tm .assert_index_equal (values , expected )
986988
987989 arrays = [[], []]
988990 index = pd .MultiIndex .from_arrays (arrays )
@@ -2269,6 +2271,28 @@ def test_unique(self):
22692271 exp = pd .MultiIndex .from_arrays ([['a' ], ['a' ]])
22702272 tm .assert_index_equal (res , exp )
22712273
2274+ # GH #17896 - with level= argument
2275+ for level in 0 , 'first' :
2276+ result = self .index .unique (level = level )
2277+ expected = Index (['foo' , 'bar' , 'baz' , 'qux' ],
2278+ name = 'first' )
2279+ tm .assert_index_equal (result , expected )
2280+
2281+ # With already unique level
2282+ mi = pd .MultiIndex .from_arrays ([[1 , 3 , 2 , 4 ], [1 , 1 , 1 , 2 ]],
2283+ names = ['first' , 'second' ])
2284+ result = mi .unique (level = level )
2285+ expected = mi .get_level_values (level )
2286+ tm .assert_index_equal (result , expected )
2287+
2288+ @pytest .mark .xfail (reason = 'GH 17924 (returns Int64Index with float data)' )
2289+ def test_unique_with_nans (self ):
2290+ # with NaNs
2291+ index = pd .MultiIndex .from_arrays ([['a' , 'b' , 'b' ], [2 , np .nan , 2 ]])
2292+ result = index .unique (level = 1 )
2293+ expected = pd .Index ([2 , np .nan ])
2294+ tm .assert_index_equal (result , expected )
2295+
22722296 def test_unique_datetimelike (self ):
22732297 idx1 = pd .DatetimeIndex (['2015-01-01' , '2015-01-01' , '2015-01-01' ,
22742298 '2015-01-01' , 'NaT' , 'NaT' ])
0 commit comments