@@ -132,7 +132,7 @@ def pivot_table(data, values=None, index=None, columns=None, aggfunc='mean',
132132 pass
133133 values = list (values )
134134
135- grouped = data .groupby (keys )
135+ grouped = data .groupby (keys , dropna = dropna )
136136 agged = grouped .agg (aggfunc )
137137
138138 table = agged
@@ -159,15 +159,15 @@ def pivot_table(data, values=None, index=None, columns=None, aggfunc='mean',
159159 if isinstance (table , DataFrame ):
160160 table = table .sort_index (axis = 1 )
161161
162- if fill_value is not None :
163- table = table .fillna (value = fill_value , downcast = 'infer' )
164-
165162 if margins :
166163 if dropna :
167164 data = data [data .notnull ().all (axis = 1 )]
168165 table = _add_margins (table , data , values , rows = index ,
169166 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' )
171171
172172 # discard the top level
173173 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',
188188
189189
190190def _add_margins (table , data , values , rows , cols , aggfunc ,
191- margins_name = 'All' ):
191+ margins_name = 'All' , dropna = True ):
192192 if not isinstance (margins_name , compat .string_types ):
193193 raise ValueError ('margins_name argument must be a string' )
194194
@@ -219,7 +219,8 @@ def _add_margins(table, data, values, rows, cols, aggfunc,
219219 marginal_result_set = _generate_marginal_results (table , data , values ,
220220 rows , cols , aggfunc ,
221221 grand_margin ,
222- margins_name )
222+ margins_name ,
223+ dropna = dropna )
223224 if not isinstance (marginal_result_set , tuple ):
224225 return marginal_result_set
225226 result , margin_keys , row_margin = marginal_result_set
@@ -277,8 +278,7 @@ def _compute_grand_margin(data, values, aggfunc,
277278
278279
279280def _generate_marginal_results (table , data , values , rows , cols , aggfunc ,
280- grand_margin ,
281- margins_name = 'All' ):
281+ grand_margin , margins_name = 'All' , dropna = True ):
282282 if len (cols ) > 0 :
283283 # need to "interleave" the margins
284284 table_pieces = []
@@ -288,7 +288,8 @@ def _all_key(key):
288288 return (key , margins_name ) + ('' ,) * (len (cols ) - 1 )
289289
290290 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 )
292293 cat_axis = 1
293294
294295 for key , piece in table .groupby (level = 0 , axis = cat_axis ):
@@ -325,7 +326,8 @@ def _all_key(key):
325326 margin_keys = table .columns
326327
327328 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 )
329331 row_margin = row_margin .stack ()
330332
331333 # slight hack
0 commit comments