如何在Pandas中用数字对字符串进行排序?

Cai*_*gnm 4 python sorting python-3.x pandas

我有一个Python熊猫数据框,在其中一个名为列status含有三种可能的值:ok,must read x more books,does not read any books yet,在x高于一个整数0.

我想status根据上面的顺序对值进行排序.

例:

  name    status
0 Paul    ok
1 Jean    must read 1 more books
2 Robert  must read 2 more books
3 John    does not read any book yet
Run Code Online (Sandbox Code Playgroud)

我发现了一些有趣的提示,使用Pandas Categoricalmap但我不知道如何处理修改字符串的变量值.

我怎样才能做到这一点?

jez*_*ael 8

使用:

a = df['status'].str.extract('(\d+)', expand=False).astype(float)

d = {'ok': a.max() + 1, 'does not read any book yet':-1}

df1 = df.iloc[(-df['status'].map(d).fillna(a)).argsort()]
print (df1)
     name                      status
0    Paul                          ok
2  Robert      must read 2 more books
1    Jean      must read 1 more books
3    John  does not read any book yet
Run Code Online (Sandbox Code Playgroud)

说明:

  1. 第一个extract整数regex \d+
  2. 然后动态地创建dictionary用于map非数值
  3. 更换NaN由s fillnanumeric Series
  4. 通过argsort获得职位
  5. 选择依据iloc排序值

  • 你的''ok'`和''还没有读过任何书'`值应该被切换,并且行的顺序颠倒了. (3认同)