<p dir="auto">Using the groupby().rolling() object seems to duplicate a level of the index.</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="In [9]: d.groupby(level='ticker').rolling(30).mean()
Out[9]: 
ticker  ticker  date      
BMO     BMO     2006-01-02          NaN
                2006-01-03          NaN

TD      TD      2016-09-22    57.139340
                2016-09-23    57.171864


In [10]: d.groupby(level='ticker').apply(pd.rolling_mean, 30)
Out[10]: 
ticker  date      
BMO     2006-01-02          NaN
        2006-01-03          NaN

TD      2016-09-22    57.139340
        2016-09-23    57.171864


In [11]: d.groupby(level='ticker').apply(lambda x: x.rolling(30).mean())
Out[11]: 
ticker  date      
BMO     2006-01-02          NaN
        2006-01-03          NaN

TD      2016-09-22    57.139340
        2016-09-23    57.171864"><pre class="notranslate"><code class="notranslate">In [9]: d.groupby(level='ticker').rolling(30).mean()
Out[9]: 
ticker  ticker  date      
BMO     BMO     2006-01-02          NaN
                2006-01-03          NaN

TD      TD      2016-09-22    57.139340
                2016-09-23    57.171864


In [10]: d.groupby(level='ticker').apply(pd.rolling_mean, 30)
Out[10]: 
ticker  date      
BMO     2006-01-02          NaN
        2006-01-03          NaN

TD      2016-09-22    57.139340
        2016-09-23    57.171864


In [11]: d.groupby(level='ticker').apply(lambda x: x.rolling(30).mean())
Out[11]: 
ticker  date      
BMO     2006-01-02          NaN
        2006-01-03          NaN

TD      2016-09-22    57.139340
        2016-09-23    57.171864
</code></pre></div>
<p dir="auto">I would expect the output to be the same in all three cases.</p>
<p dir="auto">I found another oddity while digging through <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="170700095" data-permission-text="Title is private" data-url="https://github.com/pandas-dev/pandas/issues/13966" data-hovercard-type="issue" data-hovercard-url="/pandas-dev/pandas/issues/13966/hovercard" href="https://github.com/pandas-dev/pandas/issues/13966">#13966</a>.</p>
<p dir="auto">Begin with the initial DataFrame in that issue:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="df = pd.DataFrame({'A': [1] * 20 + [2] * 12 + [3] * 8,
                   'B': np.arange(40)})"><pre class="notranslate"><code class="notranslate">df = pd.DataFrame({'A': [1] * 20 + [2] * 12 + [3] * 8,
                   'B': np.arange(40)})
</code></pre></div>
<p dir="auto">Save the grouping:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="In [215]: g = df.groupby('A')"><pre class="notranslate"><code class="notranslate">In [215]: g = df.groupby('A')
</code></pre></div>
<p dir="auto">Compute the rolling sum:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="In [216]: r = g.rolling(4)

In [217]: r.sum()
Out[217]:
         A      B
A
1 0    NaN    NaN
  1    NaN    NaN
  2    NaN    NaN
  3    4.0    6.0
  4    4.0   10.0
  5    4.0   14.0
  6    4.0   18.0
  7    4.0   22.0
  8    4.0   26.0
  9    4.0   30.0
...    ...    ...
2 30   8.0  114.0
  31   8.0  118.0
3 32   NaN    NaN
  33   NaN    NaN
  34   NaN    NaN
  35  12.0  134.0
  36  12.0  138.0
  37  12.0  142.0
  38  12.0  146.0
  39  12.0  150.0

[40 rows x 2 columns]"><pre class="notranslate"><code class="notranslate">In [216]: r = g.rolling(4)

In [217]: r.sum()
Out[217]:
         A      B
A
1 0    NaN    NaN
  1    NaN    NaN
  2    NaN    NaN
  3    4.0    6.0
  4    4.0   10.0
  5    4.0   14.0
  6    4.0   18.0
  7    4.0   22.0
  8    4.0   26.0
  9    4.0   30.0
...    ...    ...
2 30   8.0  114.0
  31   8.0  118.0
3 32   NaN    NaN
  33   NaN    NaN
  34   NaN    NaN
  35  12.0  134.0
  36  12.0  138.0
  37  12.0  142.0
  38  12.0  146.0
  39  12.0  150.0

[40 rows x 2 columns]
</code></pre></div>
<p dir="auto">It maintains the <code class="notranslate">by</code> column (<code class="notranslate">A</code>)! That column should not be in the resulting DataFrame.</p>
<p dir="auto">It gets weirder if I compute the sum over the entire grouping and then re-do the rolling calculation. Now <code class="notranslate">by</code> column is gone as expected:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="In [218]: g.sum()
Out[218]:
     B
A
1  190
2  306
3  284

In [219]: r.sum()
Out[219]:
          B
A
1 0     NaN
  1     NaN
  2     NaN
  3     6.0
  4    10.0
  5    14.0
  6    18.0
  7    22.0
  8    26.0
  9    30.0
...     ...
2 30  114.0
  31  118.0
3 32    NaN
  33    NaN
  34    NaN
  35  134.0
  36  138.0
  37  142.0
  38  146.0
  39  150.0

[40 rows x 1 columns]"><pre class="notranslate"><code class="notranslate">In [218]: g.sum()
Out[218]:
     B
A
1  190
2  306
3  284

In [219]: r.sum()
Out[219]:
          B
A
1 0     NaN
  1     NaN
  2     NaN
  3     6.0
  4    10.0
  5    14.0
  6    18.0
  7    22.0
  8    26.0
  9    30.0
...     ...
2 30  114.0
  31  118.0
3 32    NaN
  33    NaN
  34    NaN
  35  134.0
  36  138.0
  37  142.0
  38  146.0
  39  150.0

[40 rows x 1 columns]
</code></pre></div>
<p dir="auto">So the grouping summation has some sort of side effect.</p>