2013-10-20 20 views
5

द्वारा समूहित पदानुक्रमित डेटा फ्रेम में नया कॉलम जोड़ने के लिए निम्न स्क्रिप्ट हवा की दिशा और परिमाण के परिणामी औसत की गणना करने का प्रयास करती है। मेरे मासिक dataframe निम्नलिखित स्तंभ है:groupby

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) 

अब हम dataframe अनुक्रमित और वर्गीकृत किया

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) 
संबंधित मुद्दे