如何将列中的非连续整数转换为熊猫中的连续整数

时间:2020-05-14 23:38:05

标签: python pandas

我有一个如下所示的df:

    0
0   3
1   7
2   2
3   0
4   5
5   6

我想在df [0]中重新标记数字,以便保留顺序,但是它们变得连续,像这样:

    0
0   2
1   5
2   1
3   0
4   3
5   4

换句话说,最小值应为0,第二个最小值为1,第三个最小值2,依此类推。

4 个答案:

答案 0 :(得分:2)

df['cat']=df['0'].astype('category').cat.codes
df

    0   cat
0   3   2
1   7   5
2   2   1
3   0   0
4   5   3
5   6   4

如果对新列不感兴趣

df['0']=df['0'].astype('category').cat.codes

enter image description here

答案 1 :(得分:2)

看起来像rank

df['0'].rank()-1
0    2.0
1    5.0
2    1.0
3    0.0
4    3.0
5    4.0
Name: 0, dtype: float64

df['0'].argsort().sort_values().index.tolist()
[2, 5, 1, 0, 3, 4]

答案 2 :(得分:1)

如果您的df[0]是数字,则可以尝试rank

df['0'].rank() - 1

Out[138]:
0    2.0
1    5.0
2    1.0
3    0.0
4    3.0
5    4.0
Name: 0, dtype: float64

否则,

构造一个将值映射到其顺序的字典。接下来map返回df[0]

d = {v: ix for ix, v in df[0].sort_values().reset_index(drop=True).items()}    
s = df[0].map(d)

Out[126]:
0    2
1    5
2    1
3    0
4    3
5    4
Name: 0, dtype: int64

答案 3 :(得分:0)

您正在寻找

df.sort_values()

要按从最小到最大的顺序获取值,请设置ascending = True