@@ -121,22 +121,58 @@ def test_with_string_args(self):
121121 expected = getattr (self .frame , arg )(axis = 1 )
122122 tm .assert_series_equal (result , expected )
123123
124- def test_apply_broadcast (self ):
124+ def test_apply_broadcast_deprecated (self ):
125125 with tm .assert_produces_warning (FutureWarning ):
126- broadcasted = self .frame .apply (np .mean , broadcast = True )
127- agged = self .frame .apply (np .mean )
126+ self .frame .apply (np .mean , broadcast = True )
128127
129- for col , ts in compat .iteritems (broadcasted ):
130- assert (ts == agged [col ]).all ()
128+ def test_apply_broadcast (self ):
131129
132- with tm .assert_produces_warning (FutureWarning ):
133- broadcasted = self .frame .apply (np .mean , axis = 1 , broadcast = True )
134- agged = self .frame .apply (np .mean , axis = 1 )
135- for idx in broadcasted .index :
136- assert (broadcasted .xs (idx ) == agged [idx ]).all ()
130+ # scalars
131+ result = self .frame .apply (np .mean , result_type = 'broadcast' )
132+ expected = DataFrame ([self .frame .mean ()], index = self .frame .index )
133+ tm .assert_frame_equal (result , expected )
137134
138- with tm .assert_produces_warning (FutureWarning ):
139- self .frame .apply (np .mean , axis = 1 , broadcast = False )
135+ result = self .frame .apply (np .mean , axis = 1 , result_type = 'broadcast' )
136+ m = self .frame .mean (axis = 1 )
137+ expected = DataFrame ({c : m for c in self .frame .columns })
138+ tm .assert_frame_equal (result , expected )
139+
140+ # lists
141+ result = self .frame .apply (
142+ lambda x : list (range (len (self .frame .columns ))),
143+ axis = 1 ,
144+ result_type = 'broadcast' )
145+ m = list (range (len (self .frame .columns )))
146+ expected = DataFrame ([m ] * len (self .frame .index ),
147+ dtype = 'float64' ,
148+ index = self .frame .index ,
149+ columns = self .frame .columns )
150+ tm .assert_frame_equal (result , expected )
151+
152+ result = self .frame .apply (lambda x : list (range (len (self .frame .index ))),
153+ result_type = 'broadcast' )
154+ m = list (range (len (self .frame .index )))
155+ expected = DataFrame ({c : m for c in self .frame .columns },
156+ dtype = 'float64' ,
157+ index = self .frame .index )
158+ tm .assert_frame_equal (result , expected )
159+
160+ def test_apply_broadcast_error (self ):
161+ df = DataFrame (
162+ np .tile (np .arange (3 , dtype = 'int64' ), 6 ).reshape (6 , - 1 ) + 1 ,
163+ columns = ['A' , 'B' , 'C' ])
164+
165+ # > 1 ndim
166+ with pytest .raises (ValueError ):
167+ df .apply (lambda x : np .array ([1 , 2 ]).reshape (- 1 , 2 ),
168+ axis = 1 ,
169+ result_type = 'broadcast' )
170+
171+ # cannot broadcast
172+ with pytest .raises (ValueError ):
173+ df .apply (lambda x : [1 , 2 ],
174+ axis = 1 ,
175+ result_type = 'broadcast' )
140176
141177 def test_apply_raw (self ):
142178 result0 = self .frame .apply (np .mean , raw = True )
@@ -213,8 +249,7 @@ def _checkit(axis=0, raw=False):
213249 _check (no_index , lambda x : x )
214250 _check (no_index , lambda x : x .mean ())
215251
216- with tm .assert_produces_warning (FutureWarning ):
217- result = no_cols .apply (lambda x : x .mean (), broadcast = True )
252+ result = no_cols .apply (lambda x : x .mean (), result_type = 'broadcast' )
218253 assert isinstance (result , DataFrame )
219254
220255 def test_apply_with_args_kwds (self ):
@@ -680,6 +715,35 @@ def test_result_type(self):
680715 expected .columns = [0 , 1 ]
681716 assert_frame_equal (result , expected )
682717
718+ # broadcast result
719+ result = df .apply (lambda x : [1 , 2 , 3 ], axis = 1 , result_type = 'broadcast' )
720+ expected = df .copy ()
721+ assert_frame_equal (result , expected )
722+
723+ columns = ['other' , 'col' , 'names' ]
724+ result = df .apply (
725+ lambda x : pd .Series ([1 , 2 , 3 ],
726+ index = columns ),
727+ axis = 1 ,
728+ result_type = 'broadcast' )
729+ expected = df .copy ()
730+ expected .columns = columns
731+ assert_frame_equal (result , expected )
732+
733+ # series result
734+ result = df .apply (lambda x : Series ([1 , 2 , 3 ], index = x .index ), axis = 1 )
735+ expected = df .copy ()
736+ assert_frame_equal (result , expected )
737+
738+ # series result with other index
739+ columns = ['other' , 'col' , 'names' ]
740+ result = df .apply (
741+ lambda x : pd .Series ([1 , 2 , 3 ], index = columns ),
742+ axis = 1 )
743+ expected = df .copy ()
744+ expected .columns = columns
745+ assert_frame_equal (result , expected )
746+
683747 @pytest .mark .parametrize (
684748 "box" ,
685749 [lambda x : list (x ),
0 commit comments