@@ -132,7 +132,7 @@ def pivot_table(data, values=None, index=None, columns=None, aggfunc='mean',
132
132
pass
133
133
values = list (values )
134
134
135
- grouped = data .groupby (keys )
135
+ grouped = data .groupby (keys , dropna = dropna )
136
136
agged = grouped .agg (aggfunc )
137
137
138
138
table = agged
@@ -159,15 +159,15 @@ def pivot_table(data, values=None, index=None, columns=None, aggfunc='mean',
159
159
if isinstance (table , DataFrame ):
160
160
table = table .sort_index (axis = 1 )
161
161
162
- if fill_value is not None :
163
- table = table .fillna (value = fill_value , downcast = 'infer' )
164
-
165
162
if margins :
166
163
if dropna :
167
164
data = data [data .notnull ().all (axis = 1 )]
168
165
table = _add_margins (table , data , values , rows = index ,
169
166
cols = columns , aggfunc = aggfunc ,
170
- margins_name = margins_name )
167
+ margins_name = margins_name , dropna = dropna )
168
+
169
+ if fill_value is not None :
170
+ table = table .fillna (value = fill_value , downcast = 'infer' )
171
171
172
172
# discard the top level
173
173
if values_passed and not values_multi and not table .empty and \
@@ -188,7 +188,7 @@ def pivot_table(data, values=None, index=None, columns=None, aggfunc='mean',
188
188
189
189
190
190
def _add_margins (table , data , values , rows , cols , aggfunc ,
191
- margins_name = 'All' ):
191
+ margins_name = 'All' , dropna = True ):
192
192
if not isinstance (margins_name , compat .string_types ):
193
193
raise ValueError ('margins_name argument must be a string' )
194
194
@@ -219,7 +219,8 @@ def _add_margins(table, data, values, rows, cols, aggfunc,
219
219
marginal_result_set = _generate_marginal_results (table , data , values ,
220
220
rows , cols , aggfunc ,
221
221
grand_margin ,
222
- margins_name )
222
+ margins_name ,
223
+ dropna = dropna )
223
224
if not isinstance (marginal_result_set , tuple ):
224
225
return marginal_result_set
225
226
result , margin_keys , row_margin = marginal_result_set
@@ -277,8 +278,7 @@ def _compute_grand_margin(data, values, aggfunc,
277
278
278
279
279
280
def _generate_marginal_results (table , data , values , rows , cols , aggfunc ,
280
- grand_margin ,
281
- margins_name = 'All' ):
281
+ grand_margin , margins_name = 'All' , dropna = True ):
282
282
if len (cols ) > 0 :
283
283
# need to "interleave" the margins
284
284
table_pieces = []
@@ -288,7 +288,8 @@ def _all_key(key):
288
288
return (key , margins_name ) + ('' ,) * (len (cols ) - 1 )
289
289
290
290
if len (rows ) > 0 :
291
- margin = data [rows + values ].groupby (rows ).agg (aggfunc )
291
+ margin = data [rows +
292
+ values ].groupby (rows , dropna = dropna ).agg (aggfunc )
292
293
cat_axis = 1
293
294
294
295
for key , piece in table .groupby (level = 0 , axis = cat_axis ):
@@ -325,7 +326,8 @@ def _all_key(key):
325
326
margin_keys = table .columns
326
327
327
328
if len (cols ) > 0 :
328
- row_margin = data [cols + values ].groupby (cols ).agg (aggfunc )
329
+ row_margin = data [cols +
330
+ values ].groupby (cols , dropna = dropna ).agg (aggfunc )
329
331
row_margin = row_margin .stack ()
330
332
331
333
# slight hack
0 commit comments