Cómo calcular la diferencia del día entre sucesivas filas de marcos de datos de pandas con condición

Tengo un dataframe de pandas como siguiente …

item_id date 101 2016-01-05 101 2016-01-21 121 2016-01-08 121 2016-01-22 128 2016-01-19 128 2016-02-17 131 2016-01-11 131 2016-01-23 131 2016-01-24 131 2016-02-06 131 2016-02-07 

Quiero calcular la diferencia de días entre la columna de fecha pero con respecto a la columna item_id . Primero quiero ordenar el dataframe con la agrupación de fechas en item_id. Debe tener un aspecto como este

 item_id date 101 2016-01-05 101 2016-01-08 121 2016-01-21 121 2016-01-22 128 2016-01-17 128 2016-02-19 131 2016-01-11 131 2016-01-23 131 2016-01-24 131 2016-02-06 131 2016-02-07 

Luego quiero calcular la diferencia entre las fechas nuevamente agrupando en item_id Así que la salida debería verse como la siguiente

  item_id date day_difference 101 2016-01-05 0 101 2016-01-08 3 121 2016-01-21 0 121 2016-01-22 1 128 2016-01-17 0 128 2016-02-19 2 131 2016-01-11 0 131 2016-01-23 12 131 2016-01-24 1 131 2016-02-06 13 131 2016-02-07 1 

Para ordenar utilicé algo como esto.

df.groupby('item_id').apply(lambda x: new_df.sort('date'))

Pero, no funcionó. Puedo calcular la diferencia entre filas consecutivas siguiendo

(df['date'] - df['date'].shift(1))

Pero no para agrupar con item_id

Creo que puedes usar:

 df['date'] = df.groupby('item_id')['date'].apply(lambda x: x.sort_values()) df['diff'] = df.groupby('item_id')['date'].diff() / np.timedelta64(1, 'D') df['diff'] = df['diff'].fillna(0) print df item_id date diff 0 101 2016-01-05 0 1 101 2016-01-21 16 2 121 2016-01-08 0 3 121 2016-01-22 14 4 128 2016-01-19 0 5 128 2016-02-17 29 6 131 2016-01-11 0 7 131 2016-01-23 12 8 131 2016-01-24 1 9 131 2016-02-06 13 10 131 2016-02-07 1