title: Take the difference of all elements of a series with the previous ones in python pandas
body: <p>I have a dataframe with sorted values labeled by ids and I want to take the difference of the value for the first element of an id with the value of the last elements of the all previous ids. The code below does what I want:</p>
  
  <pre><code>import pandas as pd
  
  a = 'a'; b = 'b'; c = 'c'
  df = pd.DataFrame(data=[*zip([a, a, a, b, b, c, a], [1, 2, 3, 5, 6, 7, 8])],
                    columns=['id', 'value'])
  print(df)
  # # take the last value for a particular id
  # last_value_for_id = df.loc[df.id.shift(-1) != df.id, :]
  # print(last_value_for_id)
  current_id = ''; prev_values = {};diffs = {}
  for t in df.itertuples(index=False):
      prev_values[t.id] = t.value
      if current_id != t.id:
          current_id = t.id
      else: continue
      for k, v in prev_values.items():
          if k == current_id: continue
          diffs[(k, current_id)] = t.value - v
  print(pd.DataFrame(data=diffs.values(), columns=['diff'], index=diffs.keys()))
  </code></pre>
  
  <p>prints:</p>
  
  <pre><code>  id  value
  0  a      1
  1  a      2
  2  a      3
  3  b      5
  4  b      6
  5  c      7
  6  a      8
       diff
  a b     2
    c     4
  b c     1
    a     2
  c a     1
  </code></pre>
  
  <p>I want to do this in a vectorized manner however. I have found a way of getting the series of last elements as in:</p>
  
  <pre><code># take the last value for a particular id
  last_value_for_id = df.loc[df.id.shift(-1) != df.id, :]
  print(last_value_for_id)
  </code></pre>
  
  <p>which gives me:</p>
  
  <pre><code>  id  value
  2  a      3
  4  b      6
  5  c      7
  </code></pre>
  
  <p>but can't find a way of using this to take the diffs in a vectorized manner</p>