Issue 1:
Sample code

import pandas as pd
from pandas.api.types import CategoricalDtype
import numpy as np

# Load data
df = pd.read_excel('http://pbpython.com/extras/sales-funnel.xlsx')
# Make categories
df["Status"] = pd.Categorical(df["Status"], categories=["won","pending","presented","declined"], ordered=False)

# Create pivot table - WORKS FINE
pd.pivot_table(df, index=['Manager', 'Status'],
values=['Quantity', 'Price'],
aggfunc={'Quantity': len, 'Price': [np.sum, np.mean]},
fill_value=0,
margins=False)

# Here we make the only change: set parameter margins=True

# Create pivot table - FAILS on KeyError: 'Level None not found'
pd.pivot_table(df, index=['Manager', 'Status'],
values=['Quantity', 'Price'],
aggfunc={'Quantity': len, 'Price': [np.sum, np.mean]},
fill_value=0,
margins=True)

Problem description

Pivot table fails on exception, when margins are set True on previous example.

Thrown exception is:

KeyError: 'Level None not found'

Expected Output

pivot_table with margins=True should work correctly

OR

report intuitive error

OR

documentation should be clearly updated to avoid such a problem

Output of pd.show_versions()

INSTALLED VERSIONS
------------------
commit: None
python: 3.6.3.final.0
python-bits: 64
OS: Windows
OS-release: 10
machine: AMD64
processor: Intel64 Family 6 Model 94 Stepping 3, GenuineIntel
byteorder: little
LC_ALL: None
LANG: None
LOCALE: None.None

pandas: 0.21.0

pytest: 3.3.0

pip: 9.0.1

setuptools: 36.5.0.post20170921

Cython: 0.27.3

numpy: 1.13.3

scipy: 1.0.0

pyarrow: None

xarray: None

IPython: 6.2.1

sphinx: 1.6.3

patsy: 0.4.1

dateutil: 2.6.1

pytz: 2017.3

blosc: None

bottleneck: 1.2.1

tables: 3.4.2

numexpr: 2.6.4

feather: None

matplotlib: 2.1.0

openpyxl: 2.4.9

xlrd: 1.1.0

xlwt: 1.3.0

xlsxwriter: 1.0.2

lxml: 4.1.1

bs4: 4.6.0

html5lib: 0.999999999

sqlalchemy: 1.1.13

pymysql: None

psycopg2: None

jinja2: 2.10

s3fs: None

fastparquet: None

pandas_gbq: None

pandas_datareader: None

Issue 2:
When applying multiple aggregations to columns and setting margins=True I receive a KeyError. I believe that because multiple aggregations are applied the columns become a MultiIndex, which is unexpected when computing margins.

>>> import pandas as pd
>>> import numpy as np
>>> import random

>>> df = pd.DataFrame({'random1': [random.random() for i in range(10)],
'random2': [random.random() for i in range(10)],
'type': ['duck', 'bird']*5},
index=range(10,20))

>>> df.pivot_table(index='type',
aggfunc={'random1': [np.median, np.mean],
'random2': np.sum},
margins=True)

KeyError Traceback (most recent call last)
<ipython-input> in <module>()
3 aggfunc={'random1': [np.median, np.mean],
4 'random2': np.sum},
----> 5 margins=True)

/pandas/util/decorators.pyc in wrapper(*args, **kwargs)
86 else:
87 kwargs[new_arg_name] = new_arg_value
---> 88 return func(*args, **kwargs)
89 return wrapper
90 return _deprecate_kwarg

/pandas/util/decorators.pyc in wrapper(*args, **kwargs)
86 else:
87 kwargs[new_arg_name] = new_arg_value
---> 88 return func(*args, **kwargs)
89 return wrapper
90 return _deprecate_kwarg

/pandas/tools/pivot.pyc in pivot_table(data, values, index, columns, aggfunc, fill_value, margins, dropna)
145 if margins:
146 table = _add_margins(table, data, values, rows=index,
--> 147 cols=columns, aggfunc=aggfunc)
148
149 # discard the top level

/pandas/tools/pivot.pyc in _add_margins(table, data, values, rows, cols, aggfunc)
189 row_margin[k] = grand_margin[k]
190 else:
--> 191 row_margin[k] = grand_margin[k[0]]
192
193 margin_dummy = DataFrame(row_margin, columns=[key]).T

KeyError: 'random1'

The exact same error occurs with

aggfunc={'random1': {'median': np.median, 'mean': np.mean},
'random2': np.sum}

These errors do not occur when margins=False

This is using pandas version 0.15.2. I have not seen any changes which would lead me to believe it is be fixed in master.

Happy to create a PR, although I haven't done one before.