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