Crear un nuevo dataframe en pandas con nombres dynamics también agregar una nueva columna

Tengo un df de datos

df = pd.DataFrame({'A':['-a',1,'a'], 'B':['a',np.nan,'c'], 'ID':[1,2,2], 't':[pd.tslib.Timestamp.now(),pd.tslib.Timestamp.now(), np.nan]}) 

Añadida una nueva columna.

 df['YearMonth'] = df['t'].map(lambda x: 100*x.year + x.month) 

Ahora quiero escribir una función o macro que haga comparaciones de fechas, crear un nuevo dataframe y agregar una nueva columna al dataframe.

Lo intenté así, pero parece que me estoy yendo mal:

 def test(df,ym): df_new=df if(ym <= df['YearMonth']): df_new+"_"+ym=df_new return df_new+"_"+ym df_new+"_"+ym['new_col']=ym 

Ahora, cuando invoco la función de prueba, quiero que se cree un nuevo dataframe con el nombre df_new_201612 y este nuevo dataframe debe tener una columna más, con el nombre de new_col que tiene el valor de ym para todas las filas.

 test(df,201612) 

La salida del nuevo dataframe es:

df_new_201612

 AB ID t YearMonth new_col -aa 1 2016-12-05 12:37:56.374620 201612 201612 1 NaN 2 2016-12-05 12:37:56.374644 201208 201612 ac 2 nat nan 201612 

Crear variables con nombres dynamics suele ser una mala práctica.

Creo que la mejor solución para su problema es almacenar sus marcos de datos en un diccionario y generar dinámicamente el nombre de la clave para acceder a cada dataframe.

 import copy dict_of_df = {} for ym in [201511, 201612, 201710]: key_name = 'df_new_'+str(ym) dict_of_df[key_name] = copy.deepcopy(df) to_change = df['YearMonth']< ym dict_of_df[key_name].loc[to_change, 'new_col'] = ym dict_of_df.keys() Out[36]: ['df_new_201710', 'df_new_201612', 'df_new_201511'] dict_of_df Out[37]: {'df_new_201511': AB ID t YearMonth new_col 0 -aa 1 2016-12-05 07:53:35.943 201612 201612 1 1 NaN 2 2016-12-05 07:53:35.943 201612 201612 2 ac 2 2016-12-05 07:53:35.943 201612 201612, 'df_new_201612': AB ID t YearMonth new_col 0 -aa 1 2016-12-05 07:53:35.943 201612 201612 1 1 NaN 2 2016-12-05 07:53:35.943 201612 201612 2 ac 2 2016-12-05 07:53:35.943 201612 201612, 'df_new_201710': AB ID t YearMonth new_col 0 -aa 1 2016-12-05 07:53:35.943 201612 201710 1 1 NaN 2 2016-12-05 07:53:35.943 201612 201710 2 ac 2 2016-12-05 07:53:35.943 201612 201710} # Extract a single dataframe df_2015 = dict_of_df['df_new_201511']