@@ -796,27 +796,45 @@ def test_dups_fancy_indexing(self):
796
796
assert_frame_equal (df ,result )
797
797
798
798
# 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' ])
801
800
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 )
804
804
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 )
807
807
808
808
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 )
811
812
812
- # inconcistent returns for unique/duplicate indices when values are missing
813
+ # inconsistent returns for unique/duplicate indices when values are missing
813
814
df = DataFrame (randn (4 ,3 ),index = list ('ABCD' ))
814
815
expected = df .ix [['E' ]]
815
816
816
817
dfnu = DataFrame (randn (5 ,3 ),index = list ('AABCD' ))
817
818
result = dfnu .ix [['E' ]]
818
819
assert_frame_equal (result , expected )
819
820
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
+
820
838
def test_indexing_mixed_frame_bug (self ):
821
839
822
840
# GH3492
0 commit comments