How to sort pandas dataframe non-lexical?

本小妞迷上赌 提交于 2019-12-25 07:30:29

问题


What I do to sort credit in the following dataframe is to use sort_values() function (I've also tried sort()):

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

The problem is that credits are sorted like below:

                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

Ascending is False that's why 4600000.00 is before other credits. But this is not what I wanted. I wanted to sort based on the values. So in the sample above 16800000.00 and 16720000.00 should be before 4600000.00. How to sort this Dataframe non-lexical?

EDIT-1:
Data is more than that and can contain:

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

回答1:


You could sort the column separately as type float and use the index to slice the original index

In your case:

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


来源:https://stackoverflow.com/questions/37804702/how-to-sort-pandas-dataframe-non-lexical

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!