@@ -784,3 +784,47 @@ def convert_nested_indexer(indexer_type, keys):
784
784
index = pd .MultiIndex .from_product (keys ))
785
785
786
786
tm .assert_series_equal (result , expected )
787
+
788
+ def test_modify_with_duplicate_index_assigning (self ):
789
+ """ see issue #17105 """
790
+
791
+ trange = pd .date_range (start = pd .Timestamp (year = 2017 , month = 1 , day = 1 ),
792
+ end = pd .Timestamp (year = 2017 , month = 1 , day = 5 ))
793
+
794
+ # insert a duplicate element to the index
795
+ trange = trange .insert (loc = 5 ,
796
+ item = pd .Timestamp (year = 2017 , month = 1 , day = 5 ))
797
+
798
+ df = pd .DataFrame (0 , index = trange , columns = ["A" , "B" ])
799
+ bool_idx = np .array ([False , False , False , False , False , True ])
800
+
801
+ # modify the value for the duplicate index entry
802
+ df .loc [trange [bool_idx ], "A" ] = 6
803
+
804
+ expected = pd .DataFrame ({'A' : [0 , 0 , 0 , 0 , 6 , 6 ],
805
+ 'B' : [0 , 0 , 0 , 0 , 0 , 0 ]},
806
+ index = trange )
807
+
808
+ tm .assert_frame_equal (df , expected )
809
+
810
+ def test_modify_with_duplicate_index_adding (self ):
811
+ """ see issue #17105 """
812
+
813
+ trange = pd .date_range (start = pd .Timestamp (year = 2017 , month = 1 , day = 1 ),
814
+ end = pd .Timestamp (year = 2017 , month = 1 , day = 5 ))
815
+
816
+ # insert a duplicate element to the index
817
+ trange = trange .insert (loc = 5 ,
818
+ item = pd .Timestamp (year = 2017 , month = 1 , day = 5 ))
819
+
820
+ df = pd .DataFrame (0 , index = trange , columns = ["A" , "B" ])
821
+ bool_idx = np .array ([False , False , False , False , False , True ])
822
+
823
+ # modify the value for the duplicate index entry
824
+ df .loc [trange [bool_idx ], "A" ] += 7
825
+
826
+ expected = pd .DataFrame ({'A' : [0 , 0 , 0 , 0 , 7 , 7 ],
827
+ 'B' : [0 , 0 , 0 , 0 , 0 , 0 ]},
828
+ index = trange )
829
+
830
+ tm .assert_frame_equal (df , expected )
0 commit comments