2015-12-07 3 views
1

Je sais que cette question peut sembler triviale, mais je ne trouve pas la solution nulle part. J'ai vraiment gros pandas géants dataframe df qui ressemble à ceci:Ajouter une colonne de classement ordonnée à une Pandas Dataframe

          conference  IF2013 AR2013 
0           HOTMOBILE 16.333333 31.50 
1             FOGA 13.772727 60.00 
2            IEA/AIE 10.433735 28.20 
3 IEEE Real-Time and Embedded Technology and App... 10.250000 29.00 
4     Symposium on Computational Geometry 9.880342 35.00 
5             WISA 9.693878 43.60 
6             ICMT 8.750000 22.00 
7            Haskell 8.703704 39.00 

Je voudrais ajouter une colonne supplémentaire à la fin qu'il ordonne 1,2,3,4, etc. Il ressemble à ceci :

           conference  IF2013 AR2013 Ranking 
    0           HOTMOBILE 16.333333 31.50 1 
    1             FOGA 13.772727 60.00 2 
    2            IEA/AIE 10.433735 28.20 3 
    3 IEEE Real-Time and Embedded Technology and App... 10.250000 29.00 4 

Je n'arrive pas à comprendre comment ajouter une colonne supplémentaire remplie qui vient de mettre une série de nombres consécutifs.

Répondre

1

Vous pouvez essayer:

df['rank'] = df.index + 1 

print df 
#           conference  IF2013 AR2013 rank 
#0           HOTMOBILE 16.333333 31.5  1 
#1            FOGA 13.772727 60.0  2 
#2           IEA/AIE 10.433735 28.2  3 
#3 IEEE Real-Time and Embedded Technology and App... 10.250000 29.0  4 
#4    Symposium on Computational Geometry 9.880342 35.0  5 
#5            WISA 9.693878 43.6  6 
#6            ICMT 8.750000 22.0  7 
#7           Haskell 8.703704 39.0  8 

Ou utilisez rank avec le paramètre ascending=False:

df['rank'] = df['conference'].rank(ascending=False) 
print df 
#           conference  IF2013 AR2013 rank 
#0           HOTMOBILE 16.333333 31.5  1 
#1            FOGA 13.772727 60.0  2 
#2           IEA/AIE 10.433735 28.2  3 
#3 IEEE Real-Time and Embedded Technology and App... 10.250000 29.0  4 
#4    Symposium on Computational Geometry 9.880342 35.0  5 
#5            WISA 9.693878 43.6  6 
#6            ICMT 8.750000 22.0  7 
#7           Haskell 8.703704 39.0  8 
1

Vous pouvez ajouter la colonne avec range:

df['Ranking'] = range(1, len(df) + 1) 

Exemple:

import pandas as pd 
from io import StringIO 

data = """ 
             conference  IF2013 AR2013 
             HOTMOBILE 16.333333 31.50 
              FOGA 13.772727 60.00 
              IEA/AIE 10.433735 28.20 
IEEE Real-Time and Embedded Technology and App... 10.250000 29.00 
       Symposium on Computational Geometry 9.880342 35.00 
              WISA 9.693878 43.60 
              ICMT 8.750000 22.00 
              Haskell 8.703704 39.00 

""" 

df = pd.read_csv(StringIO(data), sep=' \s+') 

df['Ranking'] = range(1, len(df) + 1) 

In [183]: df 
Out[183]: 
              conference  IF2013 AR2013  Ranking 
0           HOTMOBILE 16.333333 31.5   1 
1            FOGA 13.772727 60.0   2 
2           IEA/AIE 10.433735 28.2   3 
3 IEEE Real-Time and Embedded Technology and App... 10.250000 29.0   4 
4    Symposium on Computational Geometry 9.880342 35.0   5 
5            WISA 9.693878 43.6   6 
6            ICMT 8.750000 22.0   7 
7           Haskell 8.703704 39.0   8 

EDIT

Analyse comparative:

In [202]: %timeit df['rank'] = range(1, len(df) + 1) 
10000 loops, best of 3: 127 us per loop 

In [203]: %timeit df['rank'] = df.AR2013.rank(ascending=False) 
1000 loops, best of 3: 248 us per loop 
1

Je suppose que vous cherchez la fonction rank:

df['rank'] = df['IF2013'].rank() 

De cette façon, votre résultat sera indépendant de l'index.