如何更改系列/数据文件中的值,如下所示:
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) 发布于 2021-11-21 17:44:34
我们可以使用np.greater.outer将labels与classes_to_remove进行比较,然后沿axis=1将生成的布尔掩码进行sum,并从labels列中减去这个和以获得结果。
labels -= np.greater.outer([*labels], classes_to_remove).sum(1)详细信息:
classes_to_remove中的
np.greater.outer用于将每个标签与每个数字进行比较>>> np.greater.outer([*labels], classes_to_remove)
array([[False, False],
[ True, False],
[ True, True]])的前面一步中求和布尔掩码。
>>> 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: int64https://stackoverflow.com/questions/70056928
复制相似问题