我有一个如下所示的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,依此类推。
答案 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
答案 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