@@ -796,27 +796,45 @@ def test_dups_fancy_indexing(self):
796796 assert_frame_equal (df ,result )
797797
798798 # GH 3561, dups not in selected order
799- ind = ['A' , 'A' , 'B' , 'C' ]
800- df = DataFrame ({'test' :lrange (len (ind ))}, index = ind )
799+ df = DataFrame ({'test' : [5 ,7 ,9 ,11 ]}, index = ['A' , 'A' , 'B' , 'C' ])
801800 rows = ['C' , 'B' ]
802- res = df .ix [rows ]
803- self .assert_ (rows == list (res .index ))
801+ expected = DataFrame ({'test' : [11 ,9 ]},index = rows )
802+ result = df .ix [rows ]
803+ assert_frame_equal (result , expected )
804804
805- res = df .ix [Index (rows )]
806- self . assert_ ( Index ( rows ). equals ( res . index ) )
805+ result = df .ix [Index (rows )]
806+ assert_frame_equal ( result , expected )
807807
808808 rows = ['C' ,'B' ,'E' ]
809- res = df .ix [rows ]
810- self .assert_ (rows == list (res .index ))
809+ expected = DataFrame ({'test' : [11 ,9 ,np .nan ]},index = rows )
810+ result = df .ix [rows ]
811+ assert_frame_equal (result , expected )
811812
812- # inconcistent returns for unique/duplicate indices when values are missing
813+ # inconsistent returns for unique/duplicate indices when values are missing
813814 df = DataFrame (randn (4 ,3 ),index = list ('ABCD' ))
814815 expected = df .ix [['E' ]]
815816
816817 dfnu = DataFrame (randn (5 ,3 ),index = list ('AABCD' ))
817818 result = dfnu .ix [['E' ]]
818819 assert_frame_equal (result , expected )
819820
821+ # GH 4619; duplicate indexer with missing label
822+ df = DataFrame ({"A" : [0 , 1 , 2 ]})
823+ result = df .ix [[0 ,8 ,0 ]]
824+ expected = DataFrame ({"A" : [0 , np .nan , 0 ]},index = [0 ,8 ,0 ])
825+ assert_frame_equal (result ,expected )
826+
827+ df = DataFrame ({"A" : list ('abc' )})
828+ result = df .ix [[0 ,8 ,0 ]]
829+ expected = DataFrame ({"A" : ['a' , np .nan , 'a' ]},index = [0 ,8 ,0 ])
830+ assert_frame_equal (result ,expected )
831+
832+ # non unique with non unique selector
833+ df = DataFrame ({'test' : [5 ,7 ,9 ,11 ]}, index = ['A' ,'A' ,'B' ,'C' ])
834+ expected = DataFrame ({'test' : [5 ,7 ,5 ,7 ,np .nan ]},index = ['A' ,'A' ,'A' ,'A' ,'E' ])
835+ result = df .ix [['A' ,'A' ,'E' ]]
836+ assert_frame_equal (result , expected )
837+
820838 def test_indexing_mixed_frame_bug (self ):
821839
822840 # GH3492
0 commit comments