2017-05-07 2 views
0

Im versuchen, Werte in allen Spalten nacheinander Rang und ordnen Sie die Ränge zu den Werten aus der ersten Spalte ['Tickers'] und vorzugsweise speichern Sie diese Ränge in neuen Datenrahmen so kann sagen, ich habe diesen Datenrahmen:Ranking Datenrahmen durch mehrere Spalten und die Zuordnung der Ränge

Ticker P/E  P/S  P/B  P/FCF  Dividend 
No.      
1 GWRE 433.03 10.15 5.54 47.25  0.0000 
2 NTCT 419.51 2.83 1.32 24.30  0.0000 
3 PEGA 136.61 4.77 10.43 308.60  0.0026 
4 BLKB 90.62 5.14 14.84 43.35  0.0060 
5 IRM  80.69 2.66 4.89 100000.00 0.0624 

so, dann würde ich Rang von P/E (niedrigster Wert bekommt Rang 1), dann legen Sie die Ergebniszahl in dem neuen Datenrahmen

dann geht wieder für den Rest der Spalten und schließlich der neue Datenrahmen würde so aussehen (alle mit Ausnahme der Dividenden-Spalte gleichrangig) UMN wo höchste Wert bekommt Rang 1):

Ticker P/E P/S P/B P/FCF Dividend 
No.      
1 GWRE 5 5 3  3  4 
2 NTCT 4 2 1  1  4 
3 PEGA 3 3 4  4  3 
4 BLKB 2 4 5  2  2 
5 IRM  1 1 2  5  1 

Antwort

1

Sie benötigen die rank Methode:

# get columns start with P 
p_cols = df.columns[df.columns.str.startswith("P")] 

# rank P columns in ascending order 
df[p_cols] = df[p_cols].rank(method="dense")) 

# rank Dividend column in descending order 
df['Dividend'] = df.Dividend.rank(method="dense", ascending=False) 

enter image description here

Wenn Sie einen neuen Datenrahmen bevorzugen, können Sie pd.concat verwenden, um eine neue zu bauen eins:

pd.concat([df.Ticker, 
      df.filter(regex="^P").rank(method="dense"), 
      df.Dividend.rank(method="dense", ascending=False)], 
      axis=1) 
Verwandte Themen