我想获取列值的排序顺序,并将其作为新列a_order
。
例如,值的顺序为0.5 < 2.5 < 3.6
列中的a
。
因此,在列a_order
中,0.5
对应于0
,2.5
对应于1
,而3.6
对应于{{1} }。
2
Input:
import pandas as pd
import numpy as np
df = pd.DataFrame({'a':[0.5, 3.6, 2.5]})
Output:
a
0 0.5
1 3.6
2 2.5
Expected:
答案 0 :(得分:4)
使用rank
,减去1
并转换为整数:
df['a_order'] = df['a'].rank(method='dense').sub(1).astype(int)
print (df)
a a_order
0 0.5 0
1 3.6 2
2 2.5 1
答案 1 :(得分:0)
为什么不只是:
df['a_order']=df.sort_values('a').index.tolist()
在'a_order'
列中将'a'
分配为已排序数据帧的索引
答案 2 :(得分:0)
您可以使用np.ndarray.argsort
:
df['a_order'] = df['a'].values.argsort()
print(df)
a a_order
0 0.5 0
1 3.6 2
2 2.5 1