首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫系列/数据的条件递减

熊猫系列/数据的条件递减
EN

Stack Overflow用户
提问于 2021-11-21 17:23:05
回答 1查看 56关注 0票数 1

如何更改系列/数据文件中的值,如下所示:

代码语言:javascript
复制
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,因为它比31都大,所以只减少2一次,因为它只比1大一次,并且保持0不变。最后,labels = [0, 1, 2]

编辑:

示例:classes_to_remove = [2]

数据文件:

代码语言:javascript
复制
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

预期数据:

代码语言:javascript
复制
np.unique(labels)
array([0, 1, 2, 3, 4, 5, 6], dtype=int64) 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-21 17:44:34

我们可以使用np.greater.outerlabelsclasses_to_remove进行比较,然后沿axis=1将生成的布尔掩码进行sum,并从labels列中减去这个和以获得结果。

代码语言:javascript
复制
labels -= np.greater.outer([*labels], classes_to_remove).sum(1)

详细信息:

classes_to_remove中的

  1. np.greater.outer用于将每个标签与每个数字进行比较

代码语言:javascript
复制
>>> np.greater.outer([*labels], classes_to_remove)

array([[False, False],
       [ True, False],
       [ True,  True]])

  1. 现在,我们在axis=1

的前面一步中求和布尔掩码。

代码语言:javascript
复制
>>> np.greater.outer([*labels], classes_to_remove).sum(1)

array([0, 1, 2])

  1. 从标签中减去计算出来的和,以得到结果

代码语言:javascript
复制
>>> labels - np.greater.outer([*labels], classes_to_remove).sum(1)

0    0
1    1
2    2
Name: labels, dtype: int64
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70056928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档