2016-07-12 25 views
6

dove ho trovato questa opzione in altri linguaggi come R o SQL ma non sono abbastanza sicuro su come andare su questo in Panda.Restituisce il nome della colonna (s) per un valore specifico in un dataframe panda

Quindi ho un file con 1262 colonne e 1 riga e ho bisogno delle intestazioni di colonna da restituire ogni volta che viene visualizzato un valore specifico.

diciamo per esempio questo test dataframe:

Date    col1 col2 col3 col4 col5 col6 col7 
01/01/2016 00:00 37.04 36.57 35.77 37.56 36.79 35.90 38.15 

E ho bisogno di individuare il nome colonna per esempio dove valore = 38.15. Qual è il modo migliore per farlo?

Grazie

risposta

7

Visto che avete solo una singola riga, allora è possibile chiamare iloc[0] sul risultato e utilizzare questo per mascherare le colonne:

In [47]: 
df.columns[(df == 38.15).iloc[0]] 

Out[47]: 
Index(['col7'], dtype='object') 

rottura verso il basso sopra:

In [48]: 
df == 38.15 

Out[48]: 
      Date col1 col2 col3 col4 col5 col6 col7 
01/01/2016 False False False False False False False True 

In [49]: 
(df == 38.15).iloc[0] 

Out[49]: 
Date False 
col1 False 
col2 False 
col3 False 
col4 False 
col5 False 
col6 False 
col7  True 
Name: 01/01/2016, dtype: bool 

È inoltre possibile utilizzare idxmax con il parametro axis=1:

In [52]: 
(df == 38.15).idxmax(axis=1)[0] 

Out[52]: 
'col7' 
+0

Grazie mille! Ho provato tutti e tre e funzionano. Preferisco la terza soluzione, vale a dire '(df == 38.15) .idxmax (axis = 1) [0]' perché fornisce subito il valore della colonna –

+0

Sono d'accordo, non è immediatamente ovvio che tu possa usare 'idxmax' così come il nome suggerisce indice ma il parametro 'axis' è progettato specificamente per trovare il valore massimo in base alla colonna – EdChum

2

È possibile utilizzare frame di dati per affettare e quindi ottenere le colonne nomi:

df.ix[:,df.loc[0] == 38.15].columns 

uscita:

Index([u'col7'], dtype='object') 
+0

Grazie sarebbe bello se volessi davvero l'indice e veloce ma in questo caso il nome della colonna è quello che si adatta meglio al mio problema . –

0

solo per il gusto di gettare qualcosa di un po 'diverso sul ring:

row = df.iloc[0] 
row.reset_index().set_index(0).loc[38.15] 
Problemi correlati