2017-08-01 31 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 

.diff(1)使得通過的differebnt值指定塊的差在等級0處的索引而不是在所提議的鏈路中的塊內。 換句話說,我想條目減去這兩個矩陣:

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

回答

3

您可以通過第二個層次與DataFrameGroupBy.diff使用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