2014-08-28 18 views
9

如何轉換這個數據幀從元組的多個列中的大熊貓

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

這樣:

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

注意的是,在第一個數據幀的location列包含的元組。我想從location列中創建四列。

回答

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

如果返回(分裂)的位置的一個系列,你可以用你的價值列合併(joinmerge on index)直接導致DF。

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

謝謝。 @ exp1orer的解決方案工作,所以我不必嘗試你的。 – 2014-08-29 00:23:05

+0

這很好!如果我沒有弄錯,只有當'df'的索引是'range(len(df))'時才起作用,對吧? – exp1orer 2014-08-29 05:10:17

+0

@ exp1orer不完全。 'join'是將索引與兩個幀合併的簡寫形式,所以索引只需要保持一致(這是因爲apply和col選擇不會影響它)。我會編輯答案。 – meloncholy 2014-08-29 06:37:02