有與此類似的問題,但我真正要問的有點不同。我想知道是否有一種方法可以在沒有 for 循環(使用地圖或柱狀計算)的情況下實現以下代碼(如果可能)或最快的方法。我有一個包含 m 行(>1E7)和 n 列的 DataFrame(df)。第 j+1 列以全 1 或 0 開始。for i in range(len(df)): if df.iloc[i, j] == df.iloc[i-1, j]: df.iloc[i, j+1] = df.iloc[i-1, j+1]+1因此示例輸出將如下所示: ... j j+1 ... 0 ... 3 1 ... 1 ... 4 1 ... 2 ... 4 2 ... 3 ... 4 3 ... 4 ... 6 1 ... 5 ... 6 2 ... 6 ... 7 1 ...
2 回答

UYOU
TA貢獻1878條經驗 獲得超4個贊
肯定有一些問題可以回答這個問題:
s = df.iloc[:,j]
blocks = s.ne(s.shift()).cumsum()
df.iloc[:,j+1]= s.groupby(blocks).cumcount() + 1
輸出:
... j j+1 ...
0 ... 3 1 ...
1 ... 4 1 ...
2 ... 4 2 ...
3 ... 4 3 ...
4 ... 6 1 ...
5 ... 6 2 ...
6 ... 7 1 ...

鴻蒙傳說
TA貢獻1865條經驗 獲得超7個贊
聽起來這就是你所追求的。
df['j+1'] = df.groupby('j').cumcount() + 1
輸出:
j j+1
0 3 1
1 4 1
2 4 2
3 4 3
4 6 1
5 6 2
6 7 1
添加回答
舉報
0/150
提交
取消