@@ -26,10 +26,17 @@ def dropna(request):
26
26
return request .param
27
27
28
28
29
+ @pytest .fixture (params = [True , False ])
30
+ def ordered (request ):
31
+ return request .param
32
+
33
+
29
34
@pytest .fixture (params = [([0 ] * 4 , [1 ] * 4 ), (range (0 , 3 ), range (1 , 4 ))])
30
35
def interval_values (request , closed ):
31
36
left , right = request .param
32
- return Categorical (pd .IntervalIndex .from_arrays (left , right , closed ))
37
+ return Categorical (
38
+ values = pd .IntervalIndex .from_arrays (left , right , closed ),
39
+ ordered = ordered )
33
40
34
41
35
42
class TestPivotTable :
@@ -286,6 +293,25 @@ def test_pivot_with_interval_index(self, interval_values, dropna):
286
293
expected = DataFrame ({"B" : 1 }, index = Index (interval_values .unique (), name = "A" ))
287
294
tm .assert_frame_equal (result , expected )
288
295
296
+ def test_pivot_with_interval_index_margins (self , ordered , dropna ):
297
+ # GH 25815
298
+ ordered_cat = pd .IntervalIndex .from_arrays (
299
+ [0 , 0 , 1 , 1 ], [1 , 1 , 2 , 2 ])
300
+ df = pd .DataFrame ({
301
+ 'A' : np .arange (4 , 0 , - 1 ),
302
+ 'B' : ['a' , 'b' , 'a' , 'b' ],
303
+ 'C' : pd .Categorical (ordered_cat ,
304
+ ordered = ordered ).sort_values (ascending = False )
305
+ })
306
+
307
+ pivot_tab = pd .pivot_table (data = df , index = 'C' , columns = 'B' , values = 'A' ,
308
+ aggfunc = 'sum' , margins = True )
309
+
310
+ result = pivot_tab ['All' ]
311
+ expected = pivot_tab .iloc [:, :- 1 ].sum (axis = 1 )
312
+ tm .assert_series_equal (result , expected , check_dtype = False ,
313
+ check_names = False )
314
+
289
315
def test_pass_array (self ):
290
316
result = self .data .pivot_table ("D" , index = self .data .A , columns = self .data .C )
291
317
expected = self .data .pivot_table ("D" , index = "A" , columns = "C" )
0 commit comments