如何更改系列/資料框中的值,如下所示:
labels = df_known["labels"] # get dataframe
for label in labels:
for c in classes_to_remove:
if label > c:
label -= 1 # doesn't actually change the label in the series, just the local variable
這將每個標簽減少洗掉的類數,這些類小于標簽。
例如,如果classes_to_remove = [1, 3]和labels = [0, 2, 4]我會遞減4兩次,因為它比這兩個大3和1,減量2只有一次,因為它是唯一比我的大1,并保持0不變。到底labels = [0, 1, 2]
編輯:
例子:
classes_to_remove = [2]
資料框:
labels
0 0
1 0
2 0
3 0
4 0
..
20596 6
20597 6
20598 6
20599 6
20600 6
Name: labels, Length: 15497, dtype: int64
np.unique(labels)
array([0, 1, 3, 4, 5, 6, 7], dtype=int64) # notice 2 is missing
預期資料框:
np.unique(labels)
array([0, 1, 2, 3, 4, 5, 6], dtype=int64)
uj5u.com熱心網友回復:
我們可以用np.greater.outer比較labels有classes_to_remove,然后sum沿產生boolean值面具axis=1從和中減去這筆labels列得到的結果
labels -= np.greater.outer([*labels], classes_to_remove).sum(1)
細節:
- 這里
np.greater.outer用于將每個標簽與中的每個數字進行比較classes_to_remove
>>> np.greater.outer([*labels], classes_to_remove)
array([[False, False],
[ True, False],
[ True, True]])
- 現在,我們沿軸=1 對上一步中獲得的布爾掩碼求和
>>> np.greater.outer([*labels], classes_to_remove).sum(1)
array([0, 1, 2])
- 從標簽中減去計算的總和得到結果
>>> labels - np.greater.outer([*labels], classes_to_remove).sum(1)
0 0
1 1
2 2
Name: labels, dtype: int64
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/362535.html
上一篇:根據另一個排名列將行堆疊為列
下一篇:切片多索引
