Dictionary of callables to df.style.format not behaving properly
#### Code Sample, a copy-pastable example if possible

```python
import pandas as pd
import numpy as np
from tabulate import tabulate

def render_cols(df, qdict, **kwargs):
    '''Used with pipe to add units to numbers through explicit string conversion'''
    df = df.copy()
    prec = kwargs.get('prec', 3)
    for k,v in qdict.items():
        df[k] = df[k].apply(lambda x: f'{x:.{prec}}{v}')
    return df

def col_stylers(qdict, **kwargs):
    '''Used with df.style.format to return formaters per column'''
    stylers = {}
    prec = kwargs.get('prec', 3)
    for k,v in qdict.items():
        stylers[k] = lambda x: f'{x:.{prec}}{v}'
    print(stylers)
    return stylers

df = pd.DataFrame({'A': np.linspace(1, 5, 5)})
df = pd.concat([df, pd.DataFrame(np.random.randn(5, 4), columns=list('BCDE'))],
               axis=1)
(df.pipe(render_cols, {'B': 'V', 'C': 'Hz', 'D': 's'}, prec=2)
  .pipe(render_cols, {'E': 'A'}, prec=3)
)
```
That produces in Jupyter:
```
	A	B	C	D	E
0	1.0	-0.67V	-0.61Hz	2.4s	-0.841A
1	2.0	1.4V	0.68Hz	1.5s	-1.94A
2	3.0	-0.039V	0.84Hz	0.5s	-2.44A
3	4.0	-1.2V	0.24Hz	-0.44s	-1.9A
4	5.0	-0.25V	0.96Hz	-0.41s	-0.224A
```
Followed by an alternative representation
```python
df.style.format(col_stylers(
    {'B': 'V', 'C': 'Hz', 'D': 's'}, prec=2
))
```
Produces:
```
{'B': <function col_stylers.<locals>.<lambda> at 0x7f37d8b37e18>, 'C': <function col_stylers.<locals>.<lambda> at 0x7f37d8b37ea0>, 'D': <function col_stylers.<locals>.<lambda> at 0x7f37d8b37f28>}

	A	B	C	D	E
0	1	-0.67s	-0.61s	2.4s	-0.841405
1	2	1.4s	0.68s	1.5s	-1.93606
2	3	-0.039s	0.84s	0.5s	-2.43841
3	4	-1.2s	0.24s	-0.44s	-1.89762
4	5	-0.25s	0.96s	-0.41s	-0.224401
```



#### Problem description

The styler is not properly rendering based on column assignments as I would assume a similar table to the first using pipe.  

Versions:
python   3.6.5
numpy   1.14.3
pandas   0.23.0

