Piped Function Changes DataFrame before being assigned
#### Code Sample, a copy-pastable example if possible

```
def rename_levels(df, names, level=None):
    df.index = df.index.set_names(names, level=level)
    return df

(data.col1
        .pipe(lambda x: rename_levels(x, ['plot_name1', 'plot_name2']))
        .plot
        .barh(color=['#E10019', '#FFC300', '#69AF23'], stacked=True))

plt.show()

data.groupby(level='name1')

AssertionError: Level mpan not in index
```
#### Problem description

I have a dataframe which I wish to plot from. I use method chaining so that I can plot a graph without affecting the original dataframe `data`. I wanted to change the index-column-names so used the `rename_levels` function in a `pipe` method (it seems this is the only way to do this in a method chain).

All seems good until I used a `groupby` referencing the old index-column-name and this fails. It seems that there is some overwriting of the dataframe within the function but I cannot figure out why, or if this is intended/correct behaviour.

#### Output of ``pd.show_versions()``

<details>
INSTALLED VERSIONS
------------------
commit: None
python: 3.5.2.final.0
python-bits: 64
OS: Linux
OS-release: 3.16.0-4-amd64
machine: x86_64
processor: 
byteorder: little
LC_ALL: None
LANG: en_GB.UTF-8
LOCALE: en_GB.UTF-8

pandas: 0.20.2
pytest: 2.9.2
pip: 9.0.1
setuptools: 27.2.0
Cython: 0.24.1
numpy: 1.12.1
scipy: 0.19.0
xarray: None
IPython: 5.1.0
sphinx: 1.4.6
patsy: 0.4.1
dateutil: 2.6.0
pytz: 2017.2
blosc: None
bottleneck: 1.2.0
tables: 3.4.2
numexpr: 2.6.2
feather: None
matplotlib: 2.0.2
openpyxl: 2.3.2
xlrd: 1.0.0
xlwt: 1.1.2
xlsxwriter: 0.9.3
lxml: 3.6.4
bs4: 4.5.1
html5lib: 0.999999999
sqlalchemy: 1.0.13
pymysql: 0.7.9.None
psycopg2: None
jinja2: 2.8
s3fs: None
pandas_gbq: None
pandas_datareader: None

</details>
