2016-08-15 6 views
3

У меня есть панд dataframe вроде следующего:Панды добавить новые столбцы на основе расщепления еще один столбец

A    B 
US,65,AMAZON 2016 
US,65,EBAY  2016 

Моя цель состоит, чтобы выглядеть следующим образом:

A    B  country code com 
US.65.AMAZON 2016 US   65  AMAZON 
US.65.AMAZON 2016 US   65  EBAY 

Я знаю, что этот вопрос имеет был задан до here и here, но нет из них работает для меня. Я пробовал:

df['country','code','com'] = df.Field.str.split('.') 

и

df2 = pd.DataFrame(df.Field.str.split('.').tolist(),columns = ['country','code','com','A','B']) 

я упускаю что-то? Буду признателен за любую оказанную помощь.

ответ

3

Вы можете использовать split с параметром expand=True и добавьте одну [] к левой стороне:

df[['country','code','com']] = df.A.str.split(',', expand=True) 

Тогда replace, к .:

df.A = df.A.str.replace(',','.') 

print (df) 
       A  B country code  com 
0 US.65.AMAZON 2016  US 65 AMAZON 
1 US.65.EBAY 2016  US 65 EBAY 

Другое решение с DataFrame конструктора, если нет никаких NaN значения :

df[['country','code','com']] = pd.DataFrame([ x.split(',') for x in df['A'].tolist() ]) 
df.A = df.A.str.replace(',','.') 
print (df) 
       A  B country code  com 
0 US.65.AMAZON 2016  US 65 AMAZON 
1 US.65.EBAY 2016  US 65 EBAY 

Также вы можете использовать имена столбцов в конструкторе, но затем concat необходимо:

df1=pd.DataFrame([x.split(',') for x in df['A'].tolist()],columns= ['country','code','com']) 
df.A = df.A.str.replace(',','.') 
df = pd.concat([df, df1], axis=1) 
print (df) 
       A  B country code  com 
0 US.65.AMAZON 2016  US 65 AMAZON 
1 US.65.EBAY 2016  US 65 EBAY 
+0

Отличное объяснение специально для второго подхода. огромное спасибо – dagg3r

0

Для получения новых столбцов, я предпочел бы сделать это следующим образом:

df['Country'] = df['A'].apply(lambda x: x[0]) 
df['Code'] = df['A'].apply(lambda x: x[1]) 
df['Com'] = df['A'].apply(lambda x: x[2]) 

Что касается замены от , с . вы можете использовать:

df['A'] = df['A'].str.replace(',','.') 
Смежные вопросы