2014-08-28 9 views
9

Come faccio a convertire questo dataframeDa tuple a più colonne in panda

 
              location value      
0     (Richmond, Virginia, nan, USA) 100      
1    (New York City, New York, nan, USA) 200      

a questo:

 
    city   state  region country value 
0 Richmond  Virginia nan  USA  100 
1 New York City New York nan  USA  200 

Nota che la colonna location nel primo dataframe contiene tuple. Voglio creare quattro colonne dalla colonna location.

risposta

8
new_col_list = ['city','state','regions','country'] 
for n,col in enumerate(new_col_list): 
    df[col] = df['location'].apply(lambda location: location[n]) 

df = df.drop('location',axis=1) 
4

Se si restituisce una serie di la (split) posizione, è possibile unire (join-merge on index) il risultante DF direttamente con la vostra colonna del valore.

addr = ['city', 'state', 'region', 'country'] 
df[['value']].join(df.location.apply(lambda loc: Series(loc, index=addr))) 

    value   city  state region country 
0 100  Richmond Virginia  NaN  USA 
1 200 New York City New York  NaN  USA 
+0

Grazie. La soluzione di @ exp1orer ha funzionato, quindi non ho dovuto provare il tuo. –

+0

Questo è ben fatto! Se non sbaglio, funziona solo se 'df' ha indice che è' range (len (df)) ', giusto? – exp1orer

+0

@ exp1orer Non proprio. 'join 'è una scorciatoia per l'unione sull'indice con entrambi i frame, quindi gli indici devono essere coerenti (che sarà qui in quanto l'applicazione e la selezione del col non lo influenzano). Modificherò la risposta. – meloncholy