我創建了以下資料框(實際上是 1000 多行和 20 多列):
d = {'col1': [0, 0, 4, 6], 'col2': [3, 4, 0, 0], 'col3': [0, 10, 0, 0], 'END': [0, 0, 0, 0]}
df = pd.DataFrame(data=d)
print(df)
Out:
col1 col2 col3 END
0 0 3 0 0
1 0 4 10 0
2 4 0 0 0
3 6 0 0 0
現在我想通過索引為每一列創建一個回圈來執行以下操作:檢查列中的當前項是否大于 0,如果是,則右側列中的項是否等于 0。如果兩者都是真的,然后從列中的專案中減去 1 并移動到下一列并重復。
到目前為止,我最好的嘗試是使用 while 回圈來查找正確的欄位:
Counter = len(list(df))
i = 0
while 0 < Counter:
if df.iloc[:,i] > 0 and df.iloc[:,i 1] == 0:
df.iloc[:,i] - 1
i = i 1
但是,此代碼會引發值錯誤。
我想要的結果是這樣的:
col1 col2 col3 END
0 0 2 0 0
1 0 4 9 0
2 3 0 0 0
3 5 0 0 0
uj5u.com熱心網友回復:
這應該很快:
df[df.ne(0) & df.shift(-1, axis=1).eq(0)] -= 1
輸出:
>>> df
col1 col2 col3 END
0 0 2 0 0
1 0 4 9 0
2 3 0 0 0
3 5 0 0 0
uj5u.com熱心網友回復:
另外一個選擇
df.sub(df.shift(-1, axis=1).eq(0)).clip(0)
col1 col2 col3 END
0 0 2 0 0
1 0 4 9 0
2 3 0 0 0
3 5 0 0 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/386218.html
