2017-04-10 3 views
1

Angenommen, haben Datenrahmen mit folgenden DatenPython - Abrufen von max oder min von zwei Spalten basierend auf Wert in einer anderen Spalte?

key score1 score2 count 
1 0.87 0.13 0 
2 0.67 0.33 1 
3 0.46 0.54 1 
4 0.28 0.72 0 
5 0.41 0.59 1 

was ist der kürzeste Weg min zu finden [SCORE1, SCORE2], wenn Zahl == 0 oder max [SCORE1, SCORE2] Zählerstand> 0?

vorliegende Lösung hat, ist

data['mini']=data[[score1, score2]].min(axis=1) 
data['maxi']=data[[score1, score2]].max(axis=1) 
data['fin_score']= data['mini'].where(data['count']==0, data['maxi']) 

ist es so, wie es schärfer gemacht werden kann (in 1/2 Befehlen), wie in Excel dies wie unten lag, und dann ziehen Sie einfach Formel in allen Reihen

=IF(count>0,MAX(B2:C2),MIN(B2:C2)) 

Ergebnis möchte diese

key score1 score2 count fin_score 
1 0.87 0.13 0  0.13 
2 0.67 0.33 1  0.67 
3 0.46 0.54 1  0.54 
4 0.28 0.72 0  0.28 
5 0.41 0.59 1  0.59 

Antwort

2

Excel Äquivalent der IF-Funktion für Arrays i s np.where:

df['fin_score'] = np.where(df['count']==0, df[['score1', 'score2']].min(axis=1), df[['score1', 'score2']].max(axis=1)) 

df 
Out: 
    key score1 score2 count fin_score 
0 1 0.87 0.13  0  0.13 
1 2 0.67 0.33  1  0.67 
2 3 0.46 0.54  1  0.54 
3 4 0.28 0.72  0  0.28 
4 5 0.41 0.59  1  0.59 
0

Warum benötigen Sie zusätzliche Werte in Zeilen?

data['fin_score'] = (max if data['count'] else min)(map(lambda k: data['score' + k], ('1', '2'))) 
Verwandte Themen