2016-06-14 14 views
0

Was muss ich credit in der folgenden Datenrahmen sortieren ist sort_values ​​zu verwenden() -Funktion (I auch Art versucht habe()):Wie Pandas Datenframe nicht lexikalisch zu sortieren?

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

Das Problem ist, dass Kredite sind wie unten sortiert:

   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 

Aufsteigend ist False das ist, warum 4600000.00 vor anderen Krediten ist. Aber das wollte ich nicht. Ich wollte basierend auf den Werten sortieren. Also in der obigen Probe 16800000.00 und 16720000.00 sollte vor 4600000.00 sein. Wie sortiere ich diesen nicht-lexikalischen Dataframe?

EDIT-1:
Daten ist mehr als das, und enthalten:

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 

Antwort

1

Sie könnten die Spalte separat als Typ float und verwenden Sie den Index sortieren den ursprünglichen Index

zu schneiden In Ihrem Fall:

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 
+0

siehe bearbeitet Post. – piRSquared

+0

Also war das Problem der Typ der Spalte? Habe ich recht? – ALH

+1

fast sicher – piRSquared

Verwandte Themen