From 5e79659d2ab921b086490ac6fee0e10f3963fd86 Mon Sep 17 00:00:00 2001 From: Nicholas Musolino Date: Sun, 12 Aug 2018 12:12:02 -0400 Subject: [PATCH 1/2] TST: Add test of DataFrame.xs() with duplicates (#13719) --- pandas/tests/test_multilevel.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/pandas/tests/test_multilevel.py b/pandas/tests/test_multilevel.py index 3caee2b44c579..02e311d0433c8 100644 --- a/pandas/tests/test_multilevel.py +++ b/pandas/tests/test_multilevel.py @@ -10,7 +10,7 @@ import numpy as np from pandas.core.index import Index, MultiIndex -from pandas import Panel, DataFrame, Series, notna, isna, Timestamp +from pandas import Panel, DataFrame, Series, notna, isna, Timestamp, concat from pandas.core.dtypes.common import is_float_dtype, is_integer_dtype import pandas.core.common as com @@ -486,6 +486,13 @@ def test_xs_partial(self): expected = df.loc['foo', 'one'] tm.assert_frame_equal(result, expected) + # DataFrame with a MultiIndex containing duplicates (#13719) + df_dup = concat([self.frame] * 2) + assert not df_dup.index.is_unique + expected = concat([self.frame.xs('one', level='second')] * 2) + tm.assert_frame_equal(df_dup.xs('one', level='second'), expected) + tm.assert_frame_equal(df_dup.xs(['one'], level=['second']), expected) + def test_xs_level(self): result = self.frame.xs('two', level='second') expected = self.frame[self.frame.index.get_level_values(1) == 'two'] From ee8868941d0cc1198fdca56428dc32fbc1389e06 Mon Sep 17 00:00:00 2001 From: Nicholas Musolino Date: Tue, 14 Aug 2018 08:17:29 -0400 Subject: [PATCH 2/2] Move duplicated-index case to separate test --- pandas/tests/test_multilevel.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pandas/tests/test_multilevel.py b/pandas/tests/test_multilevel.py index ac3c17ea21291..ecd0af9c13d34 100644 --- a/pandas/tests/test_multilevel.py +++ b/pandas/tests/test_multilevel.py @@ -10,7 +10,8 @@ import numpy as np from pandas.core.index import Index, MultiIndex -from pandas import Panel, DataFrame, Series, notna, isna, Timestamp, concat, read_csv +from pandas import (Panel, DataFrame, Series, notna, isna, Timestamp, concat, + read_csv) from pandas.core.dtypes.common import is_float_dtype, is_integer_dtype import pandas.core.common as com @@ -486,7 +487,8 @@ def test_xs_partial(self): expected = df.loc['foo', 'one'] tm.assert_frame_equal(result, expected) - # DataFrame with a MultiIndex containing duplicates (#13719) + def test_xs_with_duplicates(self): + # Issue #13719 df_dup = concat([self.frame] * 2) assert not df_dup.index.is_unique expected = concat([self.frame.xs('one', level='second')] * 2)