Cómo agregar una nueva columna con valores seleccionados de otra columna en Python

He estado tratando de resolver esto todo el día. Soy nuevo en Python.

Tengo una mesa con unos 50.000 registros. Pero la siguiente tabla explicará lo que estoy tratando de hacer.

Me gustaría añadir una tercera columna llamada Categoría. Esta columna contendrá resultados basados ​​en valores de las condiciones establecidas en la columna Películas.

----------------------------------------- N | Movies ----------------------------------------- 1 | Save the Last Dance ----------------------------------------- 2 | Love and Other Drugs --------------------------------------- 3 | Dance with Me --------------------------------------- 4 | Love Actually --------------------------------------- 5 | High School Musical ---------------------------------------- 

La condición es esta; busque en la columna Películas para estas palabras (Danza, Amor y Musical). Si la palabra se encuentra en la cadena, devuelva la palabra en la columna Categoría.

Esto producirá un nuevo dataframe como este al final;

 ----------------------------------------- N | Movies | Category ----------------------------------------- 1 | Save the Last Dance | Dance ----------------------------------------- 2 | Love and Other Drugs | Love --------------------------------------- 3 | Dance with Me | Dance --------------------------------------- 4 | Love Actually | Love --------------------------------------- 5 | High School Musical | Musical ---------------------------------------- 

¡¡Gracias por adelantado!!

Una forma más rápida sería crear una máscara para todas tus categorías, asumiendo que tienes un número pequeño:

 In [22]: dance_mask = df['Movies'].str.contains('Dance') love_mask = df['Movies'].str.contains('Love') musical_mask = df['Movies'].str.contains('Musical') df[dance_mask] Out[22]: N Movies 0 1 Save the Last Dance 2 3 Dance with Me [2 rows x 2 columns] In [26]: # now set category df.ix[dance_mask,'Category'] = 'Dance' df Out[26]: N Movies Category 0 1 Save the Last Dance Dance 1 2 Love and Other Drugs NaN 2 3 Dance with Me Dance 3 4 Love Actually NaN 4 5 High School Musical NaN [5 rows x 3 columns] In [28]: # repeat for remaining masks df.ix[love_mask,'Category'] = 'Love' df.ix[musical_mask,'Category'] = 'Musical' df Out[28]: N Movies Category 0 1 Save the Last Dance Dance 1 2 Love and Other Drugs Love 2 3 Dance with Me Dance 3 4 Love Actually Love 4 5 High School Musical Musical [5 rows x 3 columns] 

Si tienes una lista 2D, haz esto:

 def add_category(record): movie = record[1] categories = [] for category in ['Dance', 'Love', 'Musical']: if category in movie: categories.append(category) return record.append(', '.join(categories)) database = [add_category(record) for record in database] 

Puede cambiar la forma en que se calculan los valores para la columna de categoría cambiando la función add_category() .