pandasでDataFrameで差分をとる

以下のようなDataframeを考えよう。

df = pd.DataFrame([{"a" : 1,"b" : 2 , "c" : 3 },{"a" : 2 , "b" : 3, "c" : 5},{"a" : 1 , "b" : 9, "c" : 5} ] ,index=['1','2','3'])
# df
   a  b  c
1  1  2  3
2  2  3  5
3  1  9  5

このとき、a列の値ごとに差分をとりたい場合を考える。すでにindexされてる行で区別して差分をとることは簡単だが、a列の値ごとに差分を求めたい場合は少しばかり工夫がいる

ここで仮に普通にdf.diffしてしまうと、1行ごとに差分をとってしまいうまくかない。

df.diff()
     a    b    c
1  NaN  NaN  NaN
2  1.0  1.0  2.0
3 -1.0  6.0  0.0

そこでgroupbyをかませる。

df.groupby('a').diff()
     b    c
1  NaN  NaN
2  NaN  NaN
3  7.0  2.0