El siguiente c?digo intenta calcular el promedio resultante de la direcci?n y magnitud del viento, as? como promedios diarios de temperatura, humedad y la suma diaria de la precipitaci?n. Mi base de datos mensual tiene las siguientes columnas:
data Fecha Hora DirViento MagViento Temperatura Humedad PreciAcu 0 2011/07/01 00:00 318 6.6 21.22 100 1.7 1 2011/07/01 00:15 342 5.5 21.20 100 1.7 2 2011/07/01 00:30 329 6.6 21.15 100 4.8 3 2011/07/01 00:45 279 7.5 21.11 100 4.2 4 2011/07/01 01:00 318 6.0 21.16 100 2.5 Lo primero que hago es convertir a radianes la columna DirViento dir_rad=[] for i in range(0, len(data['DirViento'])): dir_rad.append(data['DirViento'][i]*(pi/180.0)) data['DirViento']=around(dir_rad,1) Ahora obtengo las columnas de las componentes: u y v del viento y la a?adimos a data Uviento=[] Vviento=[] for i in range(0,len(data['MagViento'])): Uviento.append(data['MagViento'][i]*sin(data[DirViento][i])) Vviento.append(data['MagViento'][i]*cos(data[DirViento][i])) data['u']=around(Uviento,1) data['v']=around(Vviento,1) data Data columns: Fecha 51 non-null values Hora 51 non-null values DirViento 51 non-null values MagViento 51 non-null values Temperatura 51 non-null values Humedad 51 non-null values PreciAcu 51 non-null values u 51 non-null values v 51 non-null values dtypes: float64(6), int64(2), object(2) Ahora indexamos los datos y agrupamos index=data.set_index(['Fecha','Hora'],inplace=True) grouped = index.groupby(level=0) por ejemplo data['u'] Fecha Hora 2011/07/01 00:00 -4.4 00:15 -1.7 00:30 -3.4 00:45 -7.4 01:00 -4.0 2011/07/02 00:00 -4.5 00:15 -4.2 00:30 -7.6 00:45 -3.8 01:00 -2.0 2011/07/03 00:00 -6.3 00:15 -13.7 00:30 -0.3 00:45 -2.5 01:00 -2.7 Ahora obtenemos la direccion media resultante para cada d?a grouped.apply(lambda x: ((scipy.arctan2(mean(x['uu']),mean(x['vv'])))/(pi/180.0))) Fecha 2011/07/01 -55.495677 2011/07/02 -39.176537 2011/07/03 -51.416339 al resultado anterior le debo aplicar las siguientes condiciones for i in grouped.apply(lambda x: ((scipy.arctan2(mean(x['uu']),mean(x['vv'])))/(pi/180.0))): if i < 180: i=i+180 else: if i > 180: i=i-180 else: i=i print i y obtenemos la siguiente salida 124.504323033 140.823463279 128.5836605 ?Por qu? no muestra la columna de fechas? c?mo se logra esto? C?mo incluir el resultado anterior a la columna DirRes y que ?sta se agregue a la siguiente salida stat_cea = grouped.agg({'DirRes':np.mean,'Temperatura':np.mean,'Humedad':np.mean,'PreciAcu':np.sum}) stat_cea Fecha DirRes Humedad PreciAcu Temperatura 2011/07/01 100.000000 30.4 21.367059 2011/07/02 99.823529 18.0 21.841765 2011/07/03 99.823529 4.0 21.347059 Agradecer? su valiosa ayuda
_______________________________________________ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/