我有一个带有multiindex
的数据框(超过150行和16列),如下所示:
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
我开始尝试使用
mask
,但后来陷入困境for i in column:
mask = (df[i] < df[i].shift())
print mask
任何人都可以朝这个方向或其他解决方案提供帮助吗?提前致谢
最佳答案
我认为需要比较两个连续的0
,用0
,where
将另一个值替换为shift
,通过NaN
将0
s转换为fillna
,最后转换为integer
:
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)
关于python - 比较数据框中的2个连续单元,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49358261/