2014-04-07 16 views
5

Ho un dataframe della forma seguente:compilazione di una Panda dataframe Frome un'altra dataframe in base a nomi di colonna

a b c 
0 1 4 6 
1 3 2 4 
2 4 1 5 

e ho una lista di nomi di colonna che ho bisogno di utilizzare per creare un nuovo dataframe utilizzando il colonne del primo DataFrame che corrispondono a ciascuna etichetta. Ad esempio, se il mio elenco di colonne è [ 'a', 'b', 'b', 'a', 'c'], il risultante dataframe dovrebbe essere:

a b b a c 
0 1 4 4 1 6 
1 3 2 2 3 4 
2 4 1 1 4 5 

Ho cercato di capire un modo veloce per eseguire queste operazioni perché ho a che fare con DataFrames estremamente grandi e non credo che il loop sia un'opzione ragionevole.

+0

Si dovrebbe considerare l'utilizzo di 'pandas.melt' ed evitare di avere colonne duplicate. –

risposta

6

Si può semplicemente utilizzare l'elenco per selezionarli:

In [44]: 

cols = ['a', 'b', 'b', 'a', 'c'] 
df[cols] 
Out[44]: 
    a b b a c 
0 1 4 4 1 6 
1 3 2 2 3 4 
2 4 1 1 4 5 

[3 rows x 5 columns] 

senza necessità di un ciclo, una volta che avete creato il vostro dataframe df quindi utilizzando un elenco di nomi di colonna sarà solo indice di loro e creare il df tu vuoi.

3

è possibile farlo direttamente:

>>> df 
    a b c 
0 1 4 6 
1 3 2 4 
2 4 1 5 

>>> column_names 
['a', 'b', 'b', 'a', 'c'] 

>>> df[column_names] 
    a b b a c 
0 1 4 4 1 6 
1 3 2 2 3 4 
2 4 1 1 4 5 

[3 rows x 5 columns] 
0

Da 0.17 in poi è possibile utilizzare reindex come

In [795]: cols = ['a', 'b', 'b', 'a', 'c'] 

In [796]: df.reindex(columns=cols) 
Out[796]: 
    a b b a c 
0 1 4 4 1 6 
1 3 2 2 3 4 
2 4 1 1 4 5 

Nota: Idealmente, non si vuole avere nomi di colonna duplicati.

Problemi correlati