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)
添加回答
舉報