@@ -762,32 +762,95 @@ def compare(result, expected):
762
762
result2 = s .loc [0 :3 ]
763
763
assert_series_equal (result1 ,result2 )
764
764
765
- def test_loc_setitem_multiindex (self ):
765
+ def test_setitem_multiindex (self ):
766
+ for index_fn in ('ix' , 'loc' ):
767
+ def check (target , indexers , value , compare_fn , expected = None ):
768
+ fn = getattr (target , index_fn )
769
+ fn .__setitem__ (indexers , value )
770
+ result = fn .__getitem__ (indexers )
771
+ if expected is None :
772
+ expected = value
773
+ compare_fn (result , expected )
774
+ # GH7190
775
+ index = pd .MultiIndex .from_product ([np .arange (0 ,100 ), np .arange (0 , 80 )], names = ['time' , 'firm' ])
776
+ t , n = 0 , 2
777
+ df = DataFrame (np .nan ,columns = ['A' , 'w' , 'l' , 'a' , 'x' , 'X' , 'd' , 'profit' ], index = index )
778
+ check (
779
+ target = df , indexers = ((t ,n ), 'X' ),
780
+ value = 0 , compare_fn = self .assertEqual
781
+ )
766
782
767
- # GH7190
768
- index = pd .MultiIndex .from_product ([np .arange (0 ,100 ), np .arange (0 , 80 )], names = ['time' , 'firm' ])
769
- t , n = 0 , 2
783
+ df = DataFrame (- 999 ,columns = ['A' , 'w' , 'l' , 'a' , 'x' , 'X' , 'd' , 'profit' ], index = index )
784
+ check (
785
+ target = df , indexers = ((t ,n ), 'X' ),
786
+ value = 1 , compare_fn = self .assertEqual
787
+ )
770
788
771
- df = DataFrame (np .nan ,columns = ['A' , 'w' , 'l' , 'a' , 'x' , 'X' , 'd' , 'profit' ], index = index )
772
- df .loc [(t ,n ),'X' ] = 0
773
- result = df .loc [(t ,n ),'X' ]
774
- self .assertEqual (result , 0 )
789
+ df = DataFrame (columns = ['A' , 'w' , 'l' , 'a' , 'x' , 'X' , 'd' , 'profit' ], index = index )
790
+ check (
791
+ target = df , indexers = ((t ,n ), 'X' ),
792
+ value = 2 , compare_fn = self .assertEqual
793
+ )
775
794
776
- df = DataFrame (- 999 ,columns = ['A' , 'w' , 'l' , 'a' , 'x' , 'X' , 'd' , 'profit' ], index = index )
777
- df .loc [(t ,n ),'X' ] = 1
778
- result = df .loc [(t ,n ),'X' ]
779
- self .assertEqual (result , 1 )
795
+ # GH 7218, assinging with 0-dim arrays
796
+ df = DataFrame (- 999 ,columns = ['A' , 'w' , 'l' , 'a' , 'x' , 'X' , 'd' , 'profit' ], index = index )
797
+ check (
798
+ target = df , indexers = ((t ,n ), 'X' ),
799
+ value = np .array (3 ), compare_fn = self .assertEqual ,
800
+ expected = 3 ,
801
+ )
780
802
781
- df = DataFrame (columns = ['A' , 'w' , 'l' , 'a' , 'x' , 'X' , 'd' , 'profit' ], index = index )
782
- df .loc [(t ,n ),'X' ] = 2
783
- result = df .loc [(t ,n ),'X' ]
784
- self .assertEqual (result , 2 )
803
+ # GH5206
804
+ df = pd .DataFrame (
805
+ np .arange (25 ).reshape (5 , 5 ), columns = 'A,B,C,D,E' .split (',' ),
806
+ dtype = float
807
+ )
808
+ df ['F' ] = 99
809
+ row_selection = df ['A' ] % 2 == 0
810
+ col_selection = ['B' , 'C' ]
811
+ df .ix [row_selection , col_selection ] = df ['F' ]
812
+ output = pd .DataFrame (99. , index = [0 , 2 , 4 ], columns = ['B' , 'C' ])
813
+ assert_frame_equal (df .ix [row_selection , col_selection ], output )
814
+ check (
815
+ target = df , indexers = (row_selection , col_selection ),
816
+ value = df ['F' ], compare_fn = assert_frame_equal ,
817
+ expected = output ,
818
+ )
785
819
786
- # GH 7218, assinging with 0-dim arrays
787
- df = DataFrame (- 999 ,columns = ['A' , 'w' , 'l' , 'a' , 'x' , 'X' , 'd' , 'profit' ], index = index )
788
- df .loc [(t ,n ), 'X' ] = np .array (3 )
789
- result = df .loc [(t ,n ),'X' ]
790
- self .assertEqual (result ,3 )
820
+ # GH11372
821
+ idx = pd .MultiIndex .from_product ([
822
+ ['A' , 'B' , 'C' ],
823
+ pd .date_range ('2015-01-01' , '2015-04-01' , freq = 'MS' )
824
+ ])
825
+ cols = pd .MultiIndex .from_product ([
826
+ ['foo' , 'bar' ],
827
+ pd .date_range ('2016-01-01' , '2016-02-01' , freq = 'MS' )
828
+ ])
829
+ df = pd .DataFrame (np .random .random ((12 , 4 )), index = idx , columns = cols )
830
+ subidx = pd .MultiIndex .from_tuples (
831
+ [('A' , pd .Timestamp ('2015-01-01' )), ('A' , pd .Timestamp ('2015-02-01' ))]
832
+ )
833
+ subcols = pd .MultiIndex .from_tuples (
834
+ [('foo' , pd .Timestamp ('2016-01-01' )), ('foo' , pd .Timestamp ('2016-02-01' ))]
835
+ )
836
+ vals = pd .DataFrame (np .random .random ((2 , 2 )), index = subidx , columns = subcols )
837
+ check (
838
+ target = df , indexers = (subidx , subcols ),
839
+ value = vals , compare_fn = assert_frame_equal ,
840
+ )
841
+ # set all columns
842
+ vals = pd .DataFrame (np .random .random ((2 , 4 )), index = subidx , columns = cols )
843
+ check (
844
+ target = df , indexers = (subidx , slice (None , None , None )),
845
+ value = vals , compare_fn = assert_frame_equal ,
846
+ )
847
+ # identity
848
+ copy = df .copy ()
849
+ check (
850
+ target = df , indexers = (df .index , df .columns ),
851
+ value = df , compare_fn = assert_frame_equal ,
852
+ expected = copy
853
+ )
791
854
792
855
def test_indexing_with_datetime_tz (self ):
793
856
0 commit comments