1 回答

TA贡献1851条经验 获得超3个赞
设置
import numpy as np
df = pd.DataFrame(np.random.randint(2,size = (10,10)))
print(df)
0 1 2 3 4 5 6 7 8 9
0 0 0 1 0 0 1 0 0 0 1
1 0 0 0 0 0 1 1 1 1 1
2 0 1 0 1 0 1 0 0 0 1
3 1 0 0 1 0 1 0 0 1 1
4 1 0 1 1 0 1 0 0 0 0
5 0 1 1 1 1 0 1 0 1 1
6 0 0 0 1 1 0 0 0 1 0
7 1 1 1 1 1 0 0 0 1 1
8 0 0 0 0 0 1 1 0 1 1
9 0 0 0 1 0 0 0 1 0 1
解决方案
Series.cumsum与Series.shift表演面具DataFrame.mask
df.mask(df.cumsum(axis = 1).shift(axis = 1).gt(0),0)
0 1 2 3 4 5 6 7 8 9
0 0 0 1 0 0 0 0 0 0 0
1 0 0 0 0 0 1 0 0 0 0
2 0 1 0 0 0 0 0 0 0 0
3 1 0 0 0 0 0 0 0 0 0
4 1 0 0 0 0 0 0 0 0 0
5 0 1 0 0 0 0 0 0 0 0
6 0 0 0 1 0 0 0 0 0 0
7 1 0 0 0 0 0 0 0 0 0
8 0 0 0 0 0 1 0 0 0 0
9 0 0 0 1 0 0 0 0 0 0
输出 OP 数据帧
print(df.mask(df.cumsum(axis = 1).shift(axis = 1).gt(0),0))
Col_A Col_B Col_C Col_D Col_E
0 0 1 0 0 0
1 1 0 0 0 0
2 0 0 0 0 1
3 1 0 0 0 0
4 1 0 0 0 0
另一个可能的解决方案:DataFrame.clip
df.sub(df.cumsum(1)).add(df).clip(lower = 0)
添加回答
举报