如何排序 pandas 数据帧非词汇?

How to sort pandas dataframe non-lexical?

我在以下数据框中对 credit 进行排序的方法是使用 sort_values() 函数(我也尝试过 sort()):

df.sort_values('credit', ascending=False, inplace=True)

问题是演职员表的排序如下:

                i    credit           m  reg_date          b      id
----------------------------------------------------------------------
238             0   4600000.00        0  2014-04-14      False  102214   
127             0   4600000.00        0  2014-12-30      False  159479   
13              0  16800000.00        0  2015-01-12      False  163503   
248             0  16720000.00        0  2012-11-11      False    5116

升序是 False,这就是为什么 4600000.00 在其他学分之前。但这不是我想要的。我想根据值进行排序。所以在上面的示例中 16800000.0016720000.00 应该在 4600000.00 之前。如何对这个 Dataframe 进行非词汇排序?

EDIT-1:
数据不止于此,还可以包含:

120             0  16708000.00        0  2013-12-17      False   51433
248             0  16720000.00        0  2012-11-11      False    5116
13              0  16800000.00        0  2015-01-12      False  163503
21              0   4634000.00        0  2014-12-29      False  159239
136             0   4650000.00        0  2012-11-07      False    4701
..            ...          ...      ...         ...        ...     ...
231             0   7715000.00        0  2014-02-15      False   83936
182             0   7750000.00        0  2015-07-13      False  201584

您可以将列单独排序为类型 float 并使用索引对原始索引进行切片

你的情况:

import pandas as pd
from StringIO import StringIO

text = """136             0   4650000.00        0  2012-11-07      False    4701
231             0   7715000.00        0  2014-02-15      False   83936
13              0  16800000.00        0  2015-01-12      False  163503
120             0  16708000.00        0  2013-12-17      False   51433
248             0  16720000.00        0  2012-11-11      False    5116
21              0   4634000.00        0  2014-12-29      False  159239
182             0   7750000.00        0  2015-07-13      False  201584
"""

df = pd.read_csv(StringIO(text), delim_whitespace=True,
                 header=None, index_col=0,
                 names=['i', 'credit', 'm', 'reg_date', 'b', 'id'])

print df.loc[df.credit.astype(float).sort_values(ascending=False).index]

     i      credit  m    reg_date      b      id
13   0  16800000.0  0  2015-01-12  False  163503
248  0  16720000.0  0  2012-11-11  False    5116
120  0  16708000.0  0  2013-12-17  False   51433
182  0   7750000.0  0  2015-07-13  False  201584
231  0   7715000.0  0  2014-02-15  False   83936
136  0   4650000.0  0  2012-11-07  False    4701
21   0   4634000.0  0  2014-12-29  False  159239