<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style style="display: none;" id="owaParaStyle" type="text/css">P {margin-top:0;margin-bottom:0;}</style>
</head>
<body tabindex="0" aria-label="Cuerpo del mensaje" fpstyle="1" dir="ltr">
<div name="divtagdefaultwrapper" id="divtagdefaultwrapper" style="font-family: Calibri,Arial,Helvetica,sans-serif; font-size: 12pt; color: #000000; margin: 0">
<div class="post-text" itemprop="description">
<p>The following script try to calculate the resulting average of the direction and magnitude of the wind. My monthly dataframe has the following column:</p>
<pre style="" class="lang-py prettyprint prettyprinted"><code><span class="pln">data

</span><span class="typ">Fecha</span><span class="pln">            </span><span class="typ">Hora</span><span class="pln">    </span><span class="typ">DirViento</span><span class="pln">  </span><span class="typ">MagViento</span><span class="pln"> </span><span class="typ">Temperatura</span><span class="pln">  </span><span class="typ">Humedad</span><span class="pln">  </span><span class="typ">PreciAcu</span><span class="pln">    
</span><span class="lit">0</span><span class="pln">   </span><span class="lit">2011</span><span class="pun">/</span><span class="lit">07</span><span class="pun">/</span><span class="lit">01</span><span class="pln">  </span><span class="lit">00</span><span class="pun">:</span><span class="lit">00</span><span class="pln">        </span><span class="lit">318</span><span class="pln">        </span><span class="lit">6.6</span><span class="pln">        </span><span class="lit">21.22</span><span class="pln">      </span><span class="lit">100</span><span class="pln">       </span><span class="lit">1.7</span><span class="pln">    
</span><span class="lit">1</span><span class="pln">   </span><span class="lit">2011</span><span class="pun">/</span><span class="lit">07</span><span class="pun">/</span><span class="lit">01</span><span class="pln">  </span><span class="lit">00</span><span class="pun">:</span><span class="lit">15</span><span class="pln">        </span><span class="lit">342</span><span class="pln">        </span><span class="lit">5.5</span><span class="pln">        </span><span class="lit">21.20</span><span class="pln">      </span><span class="lit">100</span><span class="pln">       </span><span class="lit">1.7</span><span class="pln">    
</span><span class="lit">2</span><span class="pln">   </span><span class="lit">2011</span><span class="pun">/</span><span class="lit">07</span><span class="pun">/</span><span class="lit">01</span><span class="pln">  </span><span class="lit">00</span><span class="pun">:</span><span class="lit">30</span><span class="pln">        </span><span class="lit">329</span><span class="pln">        </span><span class="lit">6.6</span><span class="pln">        </span><span class="lit">21.15</span><span class="pln">      </span><span class="lit">100</span><span class="pln">       </span><span class="lit">4.8</span><span class="pln">    
</span><span class="lit">3</span><span class="pln">   </span><span class="lit">2011</span><span class="pun">/</span><span class="lit">07</span><span class="pun">/</span><span class="lit">01</span><span class="pln">  </span><span class="lit">00</span><span class="pun">:</span><span class="lit">45</span><span class="pln">        </span><span class="lit">279</span><span class="pln">        </span><span class="lit">7.5</span><span class="pln">        </span><span class="lit">21.11</span><span class="pln">      </span><span class="lit">100</span><span class="pln">       </span><span class="lit">4.2</span><span class="pln">   
</span><span class="lit">4</span><span class="pln">   </span><span class="lit">2011</span><span class="pun">/</span><span class="lit">07</span><span class="pun">/</span><span class="lit">01</span><span class="pln">  </span><span class="lit">01</span><span class="pun">:</span><span class="lit">00</span><span class="pln">        </span><span class="lit">318</span><span class="pln">        </span><span class="lit">6.0</span><span class="pln">        </span><span class="lit">21.16</span><span class="pln">      </span><span class="lit">100</span><span class="pln">       </span><span class="lit">2.5</span><span class="pln">   </span></code></pre>
<p>The first thing I do is convert to radians the DirViento column</p>
<pre style="" class="lang-py prettyprint prettyprinted"><code><span class="pln">dir_rad</span><span class="pun">=[]</span><span class="pln">
</span><span class="kwd">for</span><span class="pln"> i </span><span class="kwd">in</span><span class="pln"> range</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> len</span><span class="pun">(</span><span class="pln">data</span><span class="pun">[</span><span class="str">'DirViento'</span><span class="pun">])):</span><span class="pln">
    dir_rad</span><span class="pun">.</span><span class="pln">append</span><span class="pun">(</span><span class="pln">data</span><span class="pun">[</span><span class="str">'DirViento'</span><span class="pun">][</span><span class="pln">i</span><span class="pun">]*(</span><span class="pln">pi</span><span class="pun">/</span><span class="lit">180.0</span><span class="pun">))</span><span class="pln">
data</span><span class="pun">[</span><span class="str">'DirViento'</span><span class="pun">]=</span><span class="pln">around</span><span class="pun">(</span><span class="pln">dir_rad</span><span class="pun">,</span><span class="lit">1</span><span class="pun">)</span><span class="pln"> </span></code></pre>
<p>Now get the columns of the components: u and v wind and add to data </p>
<pre style="" class="lang-py prettyprint prettyprinted"><code><span class="typ">Uviento</span><span class="pun">=[]</span><span class="pln">
</span><span class="typ">Vviento</span><span class="pun">=[]</span><span class="pln">
</span><span class="kwd">for</span><span class="pln"> i </span><span class="kwd">in</span><span class="pln"> range</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln">len</span><span class="pun">(</span><span class="pln">data</span><span class="pun">[</span><span class="str">'MagViento'</span><span class="pun">])):</span><span class="pln">
    </span><span class="typ">Uviento</span><span class="pun">.</span><span class="pln">append</span><span class="pun">(</span><span class="pln">data</span><span class="pun">[</span><span class="str">'MagViento'</span><span class="pun">][</span><span class="pln">i</span><span class="pun">]*</span><span class="pln">sin</span><span class="pun">(</span><span class="pln">data</span><span class="pun">[</span><span class="typ">DirViento</span><span class="pun">][</span><span class="pln">i</span><span class="pun">]))</span><span class="pln">
    </span><span class="typ">Vviento</span><span class="pun">.</span><span class="pln">append</span><span class="pun">(</span><span class="pln">data</span><span class="pun">[</span><span class="str">'MagViento'</span><span class="pun">][</span><span class="pln">i</span><span class="pun">]*</span><span class="pln">cos</span><span class="pun">(</span><span class="pln">data</span><span class="pun">[</span><span class="typ">DirViento</span><span class="pun">][</span><span class="pln">i</span><span class="pun">]))</span><span class="pln">
data</span><span class="pun">[</span><span class="str">'u'</span><span class="pun">]=</span><span class="pln">around</span><span class="pun">(</span><span class="typ">Uviento</span><span class="pun">,</span><span class="lit">1</span><span class="pun">)</span><span class="pln">   
data</span><span class="pun">[</span><span class="str">'v'</span><span class="pun">]=</span><span class="pln">around</span><span class="pun">(</span><span class="typ">Vviento</span><span class="pun">,</span><span class="lit">1</span><span class="pun">)</span><span class="pln">  


data
</span><span class="typ">Data</span><span class="pln"> columns</span><span class="pun">:</span><span class="pln">
</span><span class="typ">Fecha</span><span class="pln">           </span><span class="lit">51</span><span class="pln">  non</span><span class="pun">-</span><span class="pln">null values
</span><span class="typ">Hora</span><span class="pln">            </span><span class="lit">51</span><span class="pln">  non</span><span class="pun">-</span><span class="pln">null values
</span><span class="typ">DirViento</span><span class="pln">       </span><span class="lit">51</span><span class="pln">  non</span><span class="pun">-</span><span class="pln">null values
</span><span class="typ">MagViento</span><span class="pln">       </span><span class="lit">51</span><span class="pln">  non</span><span class="pun">-</span><span class="pln">null values
</span><span class="typ">Temperatura</span><span class="pln">     </span><span class="lit">51</span><span class="pln">  non</span><span class="pun">-</span><span class="pln">null values
</span><span class="typ">Humedad</span><span class="pln">         </span><span class="lit">51</span><span class="pln">  non</span><span class="pun">-</span><span class="pln">null values
</span><span class="typ">PreciAcu</span><span class="pln">        </span><span class="lit">51</span><span class="pln">  non</span><span class="pun">-</span><span class="pln">null values
u               </span><span class="lit">51</span><span class="pln">  non</span><span class="pun">-</span><span class="pln">null values
v               </span><span class="lit">51</span><span class="pln">  non</span><span class="pun">-</span><span class="pln">null values
dtypes</span><span class="pun">:</span><span class="pln"> float64</span><span class="pun">(</span><span class="lit">6</span><span class="pun">),</span><span class="pln"> int64</span><span class="pun">(</span><span class="lit">2</span><span class="pun">),</span><span class="pln"> object</span><span class="pun">(</span><span class="lit">2</span><span class="pun">)</span></code></pre>
<p>Now we indexed the dataframe and grouped</p>
<pre style="" class="lang-py prettyprint prettyprinted"><code><span class="pln">index</span><span class="pun">=</span><span class="pln">data</span><span class="pun">.</span><span class="pln">set_index</span><span class="pun">([</span><span class="str">'Fecha'</span><span class="pun">,</span><span class="str">'Hora'</span><span class="pun">],</span><span class="pln">inplace</span><span class="pun">=</span><span class="kwd">True</span><span class="pun">)</span><span class="pln">

grouped </span><span class="pun">=</span><span class="pln"> index</span><span class="pun">.</span><span class="pln">groupby</span><span class="pun">(</span><span class="pln">level</span><span class="pun">=</span><span class="lit">0</span><span class="pun">)</span><span class="pln">

data</span><span class="pun">[</span><span class="str">'u'</span><span class="pun">]</span><span class="pln">

</span><span class="typ">Fecha</span><span class="pln">       </span><span class="typ">Hora</span><span class="pln"> 
</span><span class="lit">2011</span><span class="pun">/</span><span class="lit">07</span><span class="pun">/</span><span class="lit">01</span><span class="pln">  </span><span class="lit">00</span><span class="pun">:</span><span class="lit">00</span><span class="pln">    </span><span class="pun">-</span><span class="lit">4.4</span><span class="pln">
            </span><span class="lit">00</span><span class="pun">:</span><span class="lit">15</span><span class="pln">    </span><span class="pun">-</span><span class="lit">1.7</span><span class="pln">
            </span><span class="lit">00</span><span class="pun">:</span><span class="lit">30</span><span class="pln">    </span><span class="pun">-</span><span class="lit">3.4</span><span class="pln">
            </span><span class="lit">00</span><span class="pun">:</span><span class="lit">45</span><span class="pln">    </span><span class="pun">-</span><span class="lit">7.4</span><span class="pln">
            </span><span class="lit">01</span><span class="pun">:</span><span class="lit">00</span><span class="pln">    </span><span class="pun">-</span><span class="lit">4.0</span><span class="pln">
</span><span class="lit">2011</span><span class="pun">/</span><span class="lit">07</span><span class="pun">/</span><span class="lit">02</span><span class="pln">  </span><span class="lit">00</span><span class="pun">:</span><span class="lit">00</span><span class="pln">    </span><span class="pun">-</span><span class="lit">4.5</span><span class="pln">
            </span><span class="lit">00</span><span class="pun">:</span><span class="lit">15</span><span class="pln">    </span><span class="pun">-</span><span class="lit">4.2</span><span class="pln">
            </span><span class="lit">00</span><span class="pun">:</span><span class="lit">30</span><span class="pln">    </span><span class="pun">-</span><span class="lit">7.6</span><span class="pln">
            </span><span class="lit">00</span><span class="pun">:</span><span class="lit">45</span><span class="pln">    </span><span class="pun">-</span><span class="lit">3.8</span><span class="pln">
            </span><span class="lit">01</span><span class="pun">:</span><span class="lit">00</span><span class="pln">    </span><span class="pun">-</span><span class="lit">2.0</span><span class="pln">
</span><span class="lit">2011</span><span class="pun">/</span><span class="lit">07</span><span class="pun">/</span><span class="lit">03</span><span class="pln">  </span><span class="lit">00</span><span class="pun">:</span><span class="lit">00</span><span class="pln">    </span><span class="pun">-</span><span class="lit">6.3</span><span class="pln">
            </span><span class="lit">00</span><span class="pun">:</span><span class="lit">15</span><span class="pln">   </span><span class="pun">-</span><span class="lit">13.7</span><span class="pln">
            </span><span class="lit">00</span><span class="pun">:</span><span class="lit">30</span><span class="pln">    </span><span class="pun">-</span><span class="lit">0.3</span><span class="pln">
            </span><span class="lit">00</span><span class="pun">:</span><span class="lit">45</span><span class="pln">    </span><span class="pun">-</span><span class="lit">2.5</span><span class="pln">
            </span><span class="lit">01</span><span class="pun">:</span><span class="lit">00</span><span class="pln">    </span><span class="pun">-</span><span class="lit">2.7</span></code></pre>
<p>Now get resultant wind direction for each day</p>
<pre style="" class="lang-py prettyprint prettyprinted"><code><span class="pln"> grouped</span><span class="pun">.</span><span class="pln">apply</span><span class="pun">(</span><span class="kwd">lambda</span><span class="pln"> x</span><span class="pun">:</span><span class="pln"> </span><span class="pun">((</span><span class="pln">scipy</span><span class="pun">.</span><span class="pln">arctan2</span><span class="pun">(</span><span class="pln">mean</span><span class="pun">(</span><span class="pln">x</span><span class="pun">[</span><span class="str">'uu'</span><span class="pun">]),</span><span class="pln">mean</span><span class="pun">(</span><span class="pln">x</span><span class="pun">[</span><span class="str">'vv'</span><span class="pun">])))/(</span><span class="pln">pi</span><span class="pun">/</span><span class="lit">180.0</span><span class="pun">)))</span><span class="pln">

 </span><span class="typ">Fecha</span><span class="pln">
 </span><span class="lit">2011</span><span class="pun">/</span><span class="lit">07</span><span class="pun">/</span><span class="lit">01</span><span class="pln">   </span><span class="pun">-</span><span class="lit">55.495677</span><span class="pln">
 </span><span class="lit">2011</span><span class="pun">/</span><span class="lit">07</span><span class="pun">/</span><span class="lit">02</span><span class="pln">   </span><span class="pun">-</span><span class="lit">39.176537</span><span class="pln">
 </span><span class="lit">2011</span><span class="pun">/</span><span class="lit">07</span><span class="pun">/</span><span class="lit">03</span><span class="pln">   </span><span class="pun">-</span><span class="lit">51.416339</span></code></pre>
<p>The result obtained, I need to apply the following conditions</p>
<pre style="" class="lang-py prettyprint prettyprinted"><code><span class="kwd">for</span><span class="pln"> i </span><span class="kwd">in</span><span class="pln"> grouped</span><span class="pun">.</span><span class="pln">apply</span><span class="pun">(</span><span class="kwd">lambda</span><span class="pln"> x</span><span class="pun">:</span><span class="pln"> </span><span class="pun">((</span><span class="pln">scipy</span><span class="pun">.</span><span class="pln">arctan2</span><span class="pun">(</span><span class="pln">mean</span><span class="pun">(</span><span class="pln">x</span><span class="pun">[</span><span class="str">'uu'</span><span class="pun">]),</span><span class="pln">mean</span><span class="pun">(</span><span class="pln">x</span><span class="pun">[</span><span class="str">'vv'</span><span class="pun">])))/(</span><span class="pln">pi</span><span class="pun">/</span><span class="lit">180.0</span><span class="pun">))):</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> i </span><span class="pun"><</span><span class="pln"> </span><span class="lit">180</span><span class="pun">:</span><span class="pln">
        i</span><span class="pun">=</span><span class="pln">i</span><span class="pun">+</span><span class="lit">180</span><span class="pln">
    </span><span class="kwd">else</span><span class="pun">:</span><span class="pln">
        </span><span class="kwd">if</span><span class="pln"> i </span><span class="pun">></span><span class="pln"> </span><span class="lit">180</span><span class="pun">:</span><span class="pln">
            i</span><span class="pun">=</span><span class="pln">i</span><span class="pun">-</span><span class="lit">180</span><span class="pln">
        </span><span class="kwd">else</span><span class="pun">:</span><span class="pln">
            i</span><span class="pun">=</span><span class="pln">i
    </span><span class="kwd">print</span><span class="pln"> i

</span><span class="lit">124.504323033</span><span class="pln">
</span><span class="lit">140.823463279</span><span class="pln">
</span><span class="lit">128.5836605</span></code></pre>
<p>How to add the previous result to the next dictionary</p>
<pre style="" class="lang-py prettyprint prettyprinted"><code><span class="pln">stat_cea </span><span class="pun">=</span><span class="pln"> grouped</span><span class="pun">.</span><span class="pln">agg</span><span class="pun">({</span><span class="str"></span><span class="pun"></span><span class="pln"></span><span class="pun"></span><span class="pln"></span><span class="pun"></span><span class="str">'DirRes'</span><span class="pun">:</span><span class="pln">np</span><span class="pun">.</span><span class="pln">mean</span><span class="pun">,</span><span class="str">'Temperatura'</span><span class="pun">:</span><span class="pln">np</span><span class="pun">.</span><span class="pln">mean</span><span class="pun">,</span><span class="str">'Humedad'</span><span class="pun">:</span><span class="pln">np</span><span class="pun">.</span><span class="pln">mean</span><span class="pun">,</span><span class="str">'PreciAcu'</span><span class="pun">:</span><span class="pln">np</span><span class="pun">.</span><span class="pln">sum</span><span class="pun">})</span><span class="pln">



stat_cea
</span><span class="typ">Fecha</span><span class="pln">        </span><span class="typ">DirRes</span><span class="pln">     </span><span class="typ">Humedad</span><span class="pln">          </span><span class="typ">PreciAcu</span><span class="pln">  </span><span class="typ">Temperatura</span><span class="pln">

</span><span class="lit">2011</span><span class="pun">/</span><span class="lit">07</span><span class="pun">/</span><span class="lit">01</span><span class="pln">             </span><span class="lit">100.000000</span><span class="pln">          </span><span class="lit">30.4</span><span class="pln">      </span><span class="lit">21.367059</span><span class="pln">              
</span><span class="lit">2011</span><span class="pun">/</span><span class="lit">07</span><span class="pun">/</span><span class="lit">02</span><span class="pln">             </span><span class="lit">99.823529</span><span class="pln">           </span><span class="lit">18.0</span><span class="pln">      </span><span class="lit">21.841765</span><span class="pln">    
</span><span class="lit">2011</span><span class="pun">/</span><span class="lit">07</span><span class="pun">/</span><span class="lit">03</span><span class="pln">             </span><span class="lit">99.823529</span><span class="pln">            </span><span class="lit">4.0</span><span class="pln">      </span><span class="lit">21.347059</span></code></pre>
</div>
</div>
</body>
</html>