2016-09-06 1 views
2

Dire que j'ai le même dataframe de this question:Sélectionner les colonnes d'une trame de données en fonction des valeurs dans une ligne de pandas géants

A0  A1  A2  B0  B1  B2  C0  C1 
0 0.84 0.47 0.55 0.46 0.76 0.42 0.24 0.75 
1 0.43 0.47 0.93 0.39 0.58 0.83 0.35 0.39 
2 0.12 0.17 0.35 0.00 0.19 0.22 0.93 0.73 
3 0.95 0.56 0.84 0.74 0.52 0.51 0.28 0.03 
4 0.73 0.19 0.88 0.51 0.73 0.69 0.74 0.61 
5 0.18 0.46 0.62 0.84 0.68 0.17 0.02 0.53 
6 0.38 0.55 0.80 0.87 0.01 0.88 0.56 0.72 

Mais au lieu de vouloir retourner la valeur minimale de chaque ligne (seulement B0, B1 , B2)

A0  A1  A2  B0  B1  B2  C0  C1  Minimum 
0 0.84 0.47 0.55 0.46 0.76 0.42 0.24 0.75 0.42 
1 0.43 0.47 0.93 0.39 0.58 0.83 0.35 0.39 0.39 
2 0.12 0.17 0.35 0.00 0.19 0.22 0.93 0.73 0.00 
3 0.95 0.56 0.84 0.74 0.52 0.51 0.28 0.03 0.51 
4 0.73 0.19 0.88 0.51 0.73 0.69 0.74 0.61 0.51 
5 0.18 0.46 0.62 0.84 0.68 0.17 0.02 0.53 0.17 
6 0.38 0.55 0.80 0.87 0.01 0.88 0.56 0.72 0.01 

Je veux retourner le nom de colonne qui contient la valeur minimum de chaque rangée (de seulement B0, B1, B2):

A0  A1  A2  B0  B1  B2  C0  C1  col_of_min 
0 0.84 0.47 0.55 0.46 0.76 0.42 0.24 0.75 B2 
1 0.43 0.47 0.93 0.39 0.58 0.83 0.35 0.39 B0 
2 0.12 0.17 0.35 0.00 0.19 0.22 0.93 0.73 B0 
3 0.95 0.56 0.84 0.74 0.52 0.51 0.28 0.03 B2 
4 0.73 0.19 0.88 0.51 0.73 0.69 0.74 0.61 B0 
5 0.18 0.46 0.62 0.84 0.68 0.17 0.02 0.53 B2 
6 0.38 0.55 0.80 0.87 0.01 0.88 0.56 0.72 B1 

Quelle est la meilleure façon de faire cela?

Répondre

5

vous pouvez utiliser filter() conjointement avec la méthode idxmin():

In [40]: x 
Out[40]: 
    A0 A1 A2 B0 B1 B2 C0 C1 
0 0.84 0.47 0.55 0.46 0.76 0.42 0.24 0.75 
1 0.43 0.47 0.93 0.39 0.58 0.83 0.35 0.39 
2 0.12 0.17 0.35 0.00 0.19 0.22 0.93 0.73 
3 0.95 0.56 0.84 0.74 0.52 0.51 0.28 0.03 
4 0.73 0.19 0.88 0.51 0.73 0.69 0.74 0.61 
5 0.18 0.46 0.62 0.84 0.68 0.17 0.02 0.53 
6 0.38 0.55 0.80 0.87 0.01 0.88 0.56 0.72 

In [41]: x['col_of_min'] = x.filter(like='B').idxmin(axis=1) 

In [42]: x 
Out[42]: 
    A0 A1 A2 B0 B1 B2 C0 C1 col_of_min 
0 0.84 0.47 0.55 0.46 0.76 0.42 0.24 0.75   B2 
1 0.43 0.47 0.93 0.39 0.58 0.83 0.35 0.39   B0 
2 0.12 0.17 0.35 0.00 0.19 0.22 0.93 0.73   B0 
3 0.95 0.56 0.84 0.74 0.52 0.51 0.28 0.03   B2 
4 0.73 0.19 0.88 0.51 0.73 0.69 0.74 0.61   B0 
5 0.18 0.46 0.62 0.84 0.68 0.17 0.02 0.53   B2 
6 0.38 0.55 0.80 0.87 0.01 0.88 0.56 0.72   B1 
+1

Merci! Et pour tous ceux qui veulent faire cela avec toutes les colonnes (sauf la colonne index si elle est nommée), essayez: 'x ['col_of_min'] = x.iloc [:, 1:]. Idxmin (axis = 1)' – spacetyper

+0

@spacetyper, merci d'avoir accepté la réponse! Peut-être que vous voulez dire pour toutes les colonnes sauf la première (qui a l'index: '0')? – MaxU

+0

Oui, c'est ce que je veux dire - merci! – spacetyper