我有一个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 :(得分:1)
我认为需要比较连续2次0
,将where
,shift
替换为0
,将NaN
转换为0
按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)