按预定义列表排序值

时间:2018-04-03 21:47:24

标签: python pandas sorting dataframe

如果我创建了一个预定义的列表,按照[" CAT"," AI"," BOC"]的顺序说前3个股票,怎么能我从下面的原始数据框中得到这个新的数据框,它基本上按照上面预定义列表的显示顺序对ticker列进行sort_value? (仍按时间顺序排列)

由于

     date       price ticker  volume
0  2018-01-01  1.323     AI    2000
1  2018-01-02  1.525     AI    1500
2  2018-01-03  1.045     AI     500
3  2018-01-01  2.110    BOC    3201
4  2018-01-02  2.150    BOC    5200
5  2018-01-03  2.810    BOC    1980
6  2018-01-01  5.199    CAT    2000
7  2018-01-02  4.980    CAT     450
8  2018-01-03  4.990    CAT    3000

1 个答案:

答案 0 :(得分:1)

一个选项可能是创建一个有序的 Categorical 列,在其上应用argsort,返回正确的索引以重新排序数据框:

df.iloc[pd.Categorical(df.ticker, categories=["CAT","AI", "BOC"], ordered=True).argsort()]

#         date  price ticker  volume
#6  2018-01-01  5.199    CAT    2000
#7  2018-01-02  4.980    CAT     450
#8  2018-01-03  4.990    CAT    3000
#0  2018-01-01  1.323     AI    2000
#1  2018-01-02  1.525     AI    1500
#2  2018-01-03  1.045     AI     500
#3  2018-01-01  2.110    BOC    3201
#4  2018-01-02  2.150    BOC    5200
#5  2018-01-03  2.810    BOC    1980