首页 > 解决方案 > 如何为列中的每个值分配(并添加为列)唯一的 int,从 0 开始,第 0 行的第一个列值,并迭代 1

问题描述

我正在寻找一种方法来为列中的每个值分配一个新的唯一值,从 0 开始,第一个列值位于 df 的第 0 行,并在遇到每个新的唯一值时迭代 1,遍历行. 这是一个最小的例子。

说这是我的数据

dfso = pd.DataFrame([9, 3, 5, 8, 4, 2, 5, 6, 4, 7, 9, 8, 5, 3, 4, 5, 6, 8, 4, 2, ], columns = ['Value']) 

dfso 

  Value
0   9
1   3
2   5
3   8
4   4
5   2
6   5
7   6
8   4
9   7
10  9
11  8
12  5
13  3
14  4
15  5
16  6
17  8
18  4
19  2

这是我正在寻找的结果

    Value   NewAssign
0   9   0
1   3   1
2   5   2
3   8   3
4   4   4
5   2   5
6   5   2
7   6   6
8   4   7
9   7   7
10  9   0
11  8   3
12  5   2
13  3   1
14  4   7
15  5   2
16  6   6
17  8   3
18  4   7
19  2   5

在第 0 行,第一个值为 9,因此将 9 分配为 0。在第 1 行,值为 3,因此将 3 分配为 1。依此类推。在第 6 行,值 5 已经有一个赋值,因此插入了这个数字,即 2。

到目前为止我尝试了什么

我试过了

pd.factorize(dfso)

但这只会导致

ValueError: could not broadcast input array from shape (20,1) into shape (20)

回答

dfso['New'] = pd.factorize(dfso['Value'])[0]

标签: pythonpandas

解决方案


推荐阅读