title: Partition pandas .diff() in multi-index level
body: <p>My question relates to calling .diff() within the partition of a multi index level</p>
  
  <p>In the following sample the output of the first </p>
  
  <p>df.diff() is </p>
  
  <pre><code>               values
  Greek English        
  alpha a           NaN
        b             2
        c             2
        d             2
  beta  e            11
        f             1
        g             1
        h             1
  </code></pre>
  
  <p>But I want it to be:</p>
  
  <pre><code>               values
  Greek English        
  alpha a           NaN
        b             2
        c             2
        d             2
  beta  e            NaN
        f             1
        g             1
        h             1
  </code></pre>
  
  <p>Here is a solution, using a loop but I am thinking I can avoid that <strong>loop</strong>!</p>
  
  <pre><code>import pandas as pd
  import numpy as np
  
  df = pd.DataFrame({'values' : [1.,3.,5.,7.,18.,19.,20.,21.],
     'Greek' : ['alpha', 'alpha', 'alpha', 'alpha','beta','beta','beta','beta'],
     'English' : ['a', 'b', 'c', 'd','e','f','g','h']})
  
  df.set_index(['Greek','English'],inplace =True)
  print df
  
  # (1.) This is not the type of .diff() i want.
  # I need it to respect the level='Greek' and restart   
  print df.diff()
  
  
  # this is one way to achieve my desired result but i have to think
  # there is a way that does not involve the need to loop.
  idx = pd.IndexSlice
  for greek_letter in df.index.get_level_values('Greek').unique():
      df.loc[idx[greek_letter,:]]['values'] = df.loc[idx[greek_letter,:]].diff()
  
  print df
  </code></pre>