2013-10-20 56 views
5

以下腳本嘗試計算風的方向和大小的最終平均值。我每月的數據框下面幾列:u和v風,並添加到數據:如何將新列添加到按組分組的分層數據框中

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 

我要做的就是轉換爲弧度的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) 

現在得到的分量的列的第一件事

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) 

現在我們索引數據幀和分組

index=data.set_index(['Fecha','Hora'],inplace=True) 

grouped = index.groupby(level=0) 

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 

現在得到最終風向每天

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 

結果得到的,我需要應用下列條件

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 

124.504323033 
140.823463279 
128.5836605 

如何將以前的結果添加到下一個字典

stat_cea = grouped.agg({'MagRes':np.mean,'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 

回答

0

您可以將自己的聚合函數應用於分組數據https://stackoverflow.com/a/10964938/2530083。所以對於你的情況,你可以嘗試類似:

import numpy as np 

def DirRes(group): 
    u=np.sum(group['MagViento'] * np.sin(np.deg2rad(group['DirViento']))) 
    v=np.sum(group['MagViento'] * np.cos(np.deg2rad(group['DirViento']))) 
    magres=np.sqrt(u*u+v*v)  

    magdir=np.rad2deg(np.arctan2(u,v)) 
    if magdir<180: 
     magdir+=180 
    elif magdir>180: 
     magdir-=180 

    return magdir 


def MagRes(group): 
    u=np.sum(group['MagViento'] * np.sin(np.deg2rad(group['DirViento']))) 
    v=np.sum(group['MagViento'] * np.cos(np.deg2rad(group['DirViento']))) 
    return np.sqrt(u*u + v*v) 
相關問題