Python 比较数据帧中的两个连续单元格

Python 比较数据帧中的两个连续单元格,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据帧(超过150行16列),带有multi-index,如下所示: a001 a002 a003 a004 a005 Year Week 2017 1 0 1 1 3

我有一个数据帧(超过150行16列),带有
multi-index
,如下所示:

              a001          a002          a003        a004         a005  
Year Week                                                                    
2017  1          0            1            1            3            0   
      2          1            2            2            4            0   
      3          2            0            3            5            0   
      4          0            0            4            0            0   
      5          0            1            5            0            0   
      6          0            2            6            1            0   
      7          0            0            7            2            0   
      8          1            0            0            3            0   
      9          2            0            0            0            0   
     10          3            2            0            0            0  
我想要的是,在下一行中,每列仅包含0之前的最后一个数字:

              a001          a002          a003        a004         a005  
Year Week                                                                    
2017  1          0            0            0            0            0   
      2          0            0            0            0            0   
      3          0            2            0            0            0   
      4          2            0            0            5            0   
      5          0            0            0            0            0   
      6          0            0            0            0            0   
      7          0            2            0            0            0   
      8          0            0            7            0            0   
      9          0            0            0            3            0   
     10          0            0            0            0            0  
我开始尝试使用
面具
,但后来我被绊倒了

for i in column:
    mask = (df[i] < df[i].shift())
    print mask
列中的i的
:
掩码=(df[i]

有人能在这方面提供帮助吗?或者有其他解决方案吗?提前感谢

我认为需要比较两个连续的
0
,将另一个值替换为
0
,将
NaN
s转换为
0
by,最后转换为
整数

mask = (df != 0) & (df.shift(-1) == 0) & (df.shift(-2) == 0)
df1 = df.where(mask).shift().fillna(0).astype(int)

print (df1)
           a001  a002  a003  a004  a005
Year Week                              
2017 1        0     0     0     0     0
     2        0     0     0     0     0
     3        0     2     0     0     0
     4        2     0     0     5     0
     5        0     0     0     0     0
     6        0     0     0     0     0
     7        0     2     0     0     0
     8        0     0     7     0     0
     9        0     0     0     3     0
     10       0     0     0     0     0
编辑:

感谢@Joe简化代码:

df1 = df.where((df != 0) & (df.shift(-1) == 0)).shift().fillna(0).astype(int)

谢谢!它也可以在没有
(df.shift(-2)==0)的情况下工作。
@Joe-不客气!顺便说一句,我是乔托。今天也是你的“命名日”
?是的:)祝你万事如意,再次感谢这一天和这里的所有答案:)也祝贺你;)感谢您的所有编辑;)