Python 比较数据帧中的两个连续单元格
我有一个数据帧(超过150行16列),带有Python 比较数据帧中的两个连续单元格,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据帧(超过150行16列),带有multi-index,如下所示: a001 a002 a003 a004 a005 Year Week 2017 1 0 1 1 3
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-不客气!顺便说一句,我是乔托。今天也是你的“命名日”?是的:)祝你万事如意,再次感谢这一天和这里的所有答案:)也祝贺你;)感谢您的所有编辑;)