dividiéndose en el guión bajo en python y almacenando el primer valor

Tengo un dataframe de pandas como df con una columna construct_name

construct_name aaaa_t1_2 cccc_t4_10 bbbb_g3_3 

y así. Primero quiero dividir todos los nombres en el subrayado y almacenar el primer elemento (aaaa, cccc, etc.) como otro nombre de columna.

Rendimiento esperado

 construct_name name aaaa_t1_2 aaaa cccc_t4_10 bbbb 

y así.

df['construct_name'].map(lambda row:row.split("_")) el siguiente df['construct_name'].map(lambda row:row.split("_")) y me da una lista como

 [aaaa,t1,2] [cccc,t4,10] 

y así

Pero cuando lo hago

df['construct_name'].map(lambda row:row.split("_"))[0] para obtener el primer elemento de la lista, aparece un error. ¿Puede sugerir una solución. Gracias

Simplemente use la división del método str vectorizado y use la indexación de enteros en la lista para obtener el primer elemento:

 In [228]: df['first'] = df['construct_name'].str.split('_').str[0] df Out[228]: construct_name first 0 aaaa_t1_2 aaaa 1 cccc_t4_10 cccc 2 bbbb_g3_3 bbbb 

Después de hacer la split , debe obtener el primer elemento (usando [0]). Y no después del map .

 In [608]: temp['name'] = temp['construct_name'].map(lambda v: v.split('_')[0]) In [609]: temp Out[609]: construct_name name 0 aaaa_t1_2 aaaa 1 cccc_t4_10 cccc 2 bbbb_g3_3 bbbb 

split tomar un argumento opcional maxsplit :

 >>> construct_name = 'aaaa_t1_2' >>> name, rest = construct_name.split('_', 1) >>> name 'aaaa'