从熊猫中的元组到多个列

时间:2014-08-28 22:49:06

标签: python pandas tuples

如何转换此数据框

                                          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列中创建四列。

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:5)

如果您返回一系列(拆分)位置,则可以直接将结果DF与您的值列合并(joinmerge on index

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

答案 2 :(得分:1)

我还没有计时,但我建议您使用此选项:

df.loc[:,'city']=df.location.map(lambda x:x[0])
df.loc[:,'state']=df.location.map(lambda x:x[1])
df.loc[:,'regions']=df.location.map(lambda x:x[2])
df.loc[:,'country']=df.location.map(lambda x:x[3])

我猜测避免显式的for循环可能使自己适合SIMD指令(肯定是numpy在寻找,但其他库可能没有)