如何转换此数据框
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
列中创建四列。
答案 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与您的值列合并(join
至merge 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在寻找,但其他库可能没有)