2017-08-01 3 views
0

はのは、私は、次のマルチインデックスパンダのデータフレームを持っているとしましょう:マルチインデックスパンダのデータフレームとの.diff()

     A B 
Date  Code  
01-01-2017 s1  1 2 
      s2  3 1 
01-02-2017 s1  2 2  
      s2  3 3 

異なりhereを議論するものから、私は.diff(1)が同じ日付を持つ値で動作することを望んでいません

.diff(1)ある
     A B 
Date  Code  
01-01-2017 s1  Nan Nan 
      s2  Nan Nan 
01-02-2017 s1  1 0  
      s2  2 1 

はのdifferebnt値で指定されたブロックによる違いを行いますし、それぞれの新しい日にリセットし、私は.diff(1)は、次の出力を提供することを代わりたいと思いますレベル0のインデックスで、提案されたリンクのようにブロック内ではありません。言い換えれば は、私がエントリーすることによって、これらの2つの行列を減算したい:

|2 2| _ |1 2| 
|3 3|  |3 1| 

答えて

3

あなたはDataFrameGroupBy.diffを有する第2のレベルでgroupbyを使用することができます。

df = df.sort_index() 

df = df.groupby(level=1).diff() 
print (df) 
        A B 
Date  Code   
01-01-2017 s1 NaN NaN 
      s2 NaN NaN 
01-02-2017 s1 1.0 0.0 
      s2 0.0 2.0 

を最初のレベルを使用している場合ので:

df = df.groupby(level=0).diff() 
print (df) 
        A B 
Date  Code   
01-01-2017 s1 NaN NaN 
      s2 2.0 -1.0 
01-02-2017 s1 NaN NaN 
      s2 1.0 1.0 
+1

レベル0のインデックスが注文されると仮定する必要がありますか? – Wen

+0

はいレベル0はすでにご注文されています – SirC

+0

@SirCこの回答はお受けできます – Wen

関連する問題