2017-04-10 13 views
1

と仮定は、データPython - 別の列の値に基づいて2つの列の最大値または最小値のいずれかを取得していますか?

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 

分を発見する最短の方法です何[SCORE1、score2]のカウント== 0またはMAXであれば[SCORE1、score2]数> 0と次のようにデータフレームを持っていますか?

本溶液にしているが

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']) 

Excelで、これは以下のようになり、その後、ちょうどすべての行

横切っ式をドラッグするように、それは、(1/2コマンドで)、より鮮明な行うことができる方法があります
=IF(count>0,MAX(B2:C2),MIN(B2:C2)) 

結果は、私はこの

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 

答えて

2

ExcelのIF関数の同等の配列のための希望します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

なぜ余分な値が行に格納されている必要がありますか?

data['fin_score'] = (max if data['count'] else min)(map(lambda k: data['score' + k], ('1', '2'))) 
関連する問題