分组
<p>[TOC]</p>
<pre><code class="language-python">%matplotlib inline
%load_ext autoreload
%autoreload 2
import meteva.base as meb
import pandas as pd
import numpy as np
import datetime
import copy</code></pre>
<pre><code class="language-python">data = {&quot;id&quot;:[54511,54522],&quot;lon&quot;:[100,110],&quot;lat&quot;:[30,40],&quot;ob&quot;:[0,0],&quot;grapes&quot;:[0,0],&quot;ec&quot;:[0,0],}
df = pd.DataFrame(data)
sta = meb.sta_data(df)
meb.set_stadata_coords(sta,level = 1000,time = datetime.datetime(2019,12,31,8,0),dtime = 0)
sta1 = copy.deepcopy(sta)
meb.set_stadata_coords(sta1,level = 850)
sta = meb.combine_join(sta,sta1)
sta1 = copy.deepcopy(sta)
meb.set_stadata_coords(sta1,time = datetime.datetime(2020,1,1,20,0))
sta = meb.combine_join(sta,sta1)
sta1 = copy.deepcopy(sta)
meb.set_stadata_coords(sta1,dtime = 24)
sta_all = meb.combine_join(sta,sta1)
sta_all.iloc[:,-3] = [10,10,10,10,20,20,20,20,50,50,50,50,80,80,80,80]
sta_all.iloc[:,-2:] = (np.random.rand(16,2)*100).astype(np.int16)
sta_all.iloc[10:13,-1] = meb.IV
print(sta_all)</code></pre>
<pre><code> level time dtime id lon lat ob grapes ec
0 1000 2019-12-31 08:00:00 0 54511 100 30 10 62 55
1 1000 2019-12-31 08:00:00 0 54522 110 40 10 7 45
2 850 2019-12-31 08:00:00 0 54511 100 30 10 16 7
3 850 2019-12-31 08:00:00 0 54522 110 40 10 28 76
4 1000 2020-01-01 20:00:00 0 54511 100 30 20 75 21
5 1000 2020-01-01 20:00:00 0 54522 110 40 20 4 74
6 850 2020-01-01 20:00:00 0 54511 100 30 20 20 46
7 850 2020-01-01 20:00:00 0 54522 110 40 20 44 47
8 1000 2019-12-31 08:00:00 24 54511 100 30 50 47 30
9 1000 2019-12-31 08:00:00 24 54522 110 40 50 75 81
10 850 2019-12-31 08:00:00 24 54511 100 30 50 5 999999
11 850 2019-12-31 08:00:00 24 54522 110 40 50 20 999999
12 1000 2020-01-01 20:00:00 24 54511 100 30 80 46 999999
13 1000 2020-01-01 20:00:00 24 54522 110 40 80 90 48
14 850 2020-01-01 20:00:00 24 54511 100 30 80 30 82
15 850 2020-01-01 20:00:00 24 54522 110 40 80 56 37</code></pre>
<h1>将数据分组</h1>
<p><strong>group((data,g = None,gll = None)</strong><br />
将站点数据按指定方式进行分组 </p>
<p><strong>参数说明:</strong><br />
<strong><font face="黑体" color=green size=5>data</font></strong> :<a href="https://www.showdoc.cc/nmc?page_id=3744334022014027">站点数据</a><br />
<strong><font face="黑体" color=green size=5>g</font></strong> :指定分组维度,对预报观测样本进行分组检验时的分组依据,缺省是为None,即不进行分组检验,非缺省时为字符串形式,可选项包括 </p>
<table>
<thead>
<tr>
<th style="text-align: left;">可选项</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">None</td>
<td style="text-align: left;">不分组,返回原数据和gll的原值</td>
</tr>
<tr>
<td style="text-align: left;">"level"</td>
<td style="text-align: left;">按层次进行分组</td>
</tr>
<tr>
<td style="text-align: left;">"time"</td>
<td style="text-align: left;">按起报时间分组</td>
</tr>
<tr>
<td style="text-align: left;">"time_range"</td>
<td style="text-align: left;">按起报时间区间分组</td>
</tr>
<tr>
<td style="text-align: left;">"year"</td>
<td style="text-align: left;">按起报时间中的年份进行分组</td>
</tr>
<tr>
<td style="text-align: left;">"month"</td>
<td style="text-align: left;">按起报时间中的月份进行分组</td>
</tr>
<tr>
<td style="text-align: left;">"day"</td>
<td style="text-align: left;">按起报时间中的日期进行分组</td>
</tr>
<tr>
<td style="text-align: left;">"dayofyear"</td>
<td style="text-align: left;">按起报时间中的日期在一年中的排序(day_of_year)进行分组</td>
</tr>
<tr>
<td style="text-align: left;">"hour"</td>
<td style="text-align: left;">按起报时间的小时数(hour_of_day)进行分组</td>
</tr>
<tr>
<td style="text-align: left;">"day_hour"</td>
<td style="text-align: left;">按起报时间的日期和小时数进行分组,在对分钟级滚动更新的预报进行分类检验时,按time分组太密,按day分组太稀,则可用该参数分组</td>
</tr>
<tr>
<td style="text-align: left;">"year_month"</td>
<td style="text-align: left;">在将多年的数据按月进行统计,并且要求不同年份的相同月份不做叠加时采用该参数</td>
</tr>
<tr>
<td style="text-align: left;">"ob_time"</td>
<td style="text-align: left;">按观测时间(起报时间+预报时效)进行分组</td>
</tr>
<tr>
<td style="text-align: left;">"ob_time_range"</td>
<td style="text-align: left;">按观测时间(起报时间+预报时效)区间进行分组</td>
</tr>
<tr>
<td style="text-align: left;">"ob_year"</td>
<td style="text-align: left;">按观测时间(起报时间+预报时效)中的年份进行分组</td>
</tr>
<tr>
<td style="text-align: left;">"ob_month"</td>
<td style="text-align: left;">按观测时间(起报时间+预报时效)中的月份进行分组</td>
</tr>
<tr>
<td style="text-align: left;">"ob_day"</td>
<td style="text-align: left;">按观测时间(起报时间+预报时效)中的日期进行分组</td>
</tr>
<tr>
<td style="text-align: left;">"ob_dayofyear"</td>
<td style="text-align: left;">按观测时间(起报时间+预报时效)中的日期在一年中的排序(day_of_year)进行分组</td>
</tr>
<tr>
<td style="text-align: left;">"ob_hour"</td>
<td style="text-align: left;">按观测时间(起报时间+预报时效)中的小时数(hour_of_day)进行分组</td>
</tr>
<tr>
<td style="text-align: left;">"ob_day_hour"</td>
<td style="text-align: left;">按起报时间的日期和小时数进行分组,在对分钟级滚动更新的预报进行分类检验时,按time分组太密,按day分组太稀,则可用该参数分组</td>
</tr>
<tr>
<td style="text-align: left;">"ob_year_month"</td>
<td style="text-align: left;">在将多年的数据按月进行统计,并且要求不同年份的相同月份不做叠加时采用该参数</td>
</tr>
<tr>
<td style="text-align: left;">"dtime"</td>
<td style="text-align: left;">按预报时效进行分组</td>
</tr>
<tr>
<td style="text-align: left;">"dtime_range"</td>
<td style="text-align: left;">按预报时效区间进行分组</td>
</tr>
<tr>
<td style="text-align: left;">"dday"</td>
<td style="text-align: left;">按预报时效包含的天数进行分组,例如预报时效为0、12、24和36小时的样本会分别被标记为 0、1、1和2</td>
</tr>
<tr>
<td style="text-align: left;">"dhour"</td>
<td style="text-align: left;">按预报时效整除24小时后的余数进行分组,例如预报时效为12、24和36小时的样本会分别被标记为 12,0和12</td>
</tr>
<tr>
<td style="text-align: left;">"id"</td>
<td style="text-align: left;">按站号进行分组</td>
</tr>
<tr>
<td style="text-align: left;">"lon_range"</td>
<td style="text-align: left;">按经度区间分组</td>
</tr>
<tr>
<td style="text-align: left;">"lon_step"</td>
<td style="text-align: left;">按经度进行等间距分组</td>
</tr>
<tr>
<td style="text-align: left;">"lat_range"</td>
<td style="text-align: left;">按维度区间分组</td>
</tr>
<tr>
<td style="text-align: left;">"lat_step"</td>
<td style="text-align: left;">按纬度进行等间距分组</td>
</tr>
<tr>
<td style="text-align: left;">"last_range"</td>
<td style="text-align: left;">按最后一列数据值的取值区间进行分组,分组后最后一列数据将被丢弃</td>
</tr>
<tr>
<td style="text-align: left;">"last_step"</td>
<td style="text-align: left;">根据最后一列数据值的大小进行等距分组,分组后最后一列数据将被丢弃</td>
</tr>
<tr>
<td style="text-align: left;">**kwargs</td>
<td style="text-align: left;">通过该参数接受和数据列名称相关的参数,有两种具体情形,<br>情形3:如果参数名称正好等于数据列名称,参数的值为一个列表,当数据列的取值属于列表时,结果会保留;<br>情形2:如果参数名称=数据列名称+"_range时",参数值必须设置双层列表,其中内层列表为长度为2,代表取值范围,当数据列的取值在参数设定的取值范围内会被作为一组;<br>情形3:如果参数名称=数据列名称+"_step时",参数值必须是长度等于2的列表,函数将根据它生成等间距的区间,用于分组。</td>
</tr>
</tbody>
</table>
<p> <strong><font face="黑体" color=green size=5>gll</strong>: 指定分组的取值区间 </p>
<table>
<thead>
<tr>
<th style="text-align: left;">适用情况</th>
<th style="text-align: left;">参数形式</th>
<th style="text-align: left;">示例及效果</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">g="lon_step", "lat_step"、 "last_step"或者 列名称+"_step"时</td>
<td style="text-align: left;">单层列表,其中第0个元素为等距分割的起始值,第1个元素为等级分割的间隔</td>
<td style="text-align: left;">例如当站点数据集分布在经度范围为69-135°E的区域内,如果g="lon",gll = [100,10],则会将所有的数据按照[60,70),[70,80),[80,90),[90,100),[100,110),[110,120),[120,130)[130,140)共8个经度区间(前闭后开)分组</td>
</tr>
<tr>
<td style="text-align: left;">g="time_range", "ob_time_range", "dtime_range", "lon_range", "lat_range", "last_range"或者 列名称+"_range"时</td>
<td style="text-align: left;">双层列表,其中每一个内层列表的第0个元素为区间的起始值,第1个元素为区间的结束值(闭区间),不同区间可重叠</td>
<td style="text-align: left;">例如当站点数据集分布在经度范围为69-139°E的区域内,如果g = "lon",gll = [[80,90],[110-120]],则会从数据中提取经度位于80-90°E和110-120°E的两组数据</td>
</tr>
<tr>
<td style="text-align: left;">g="grid"时</td>
<td style="text-align: left;">单层列表,列表中的每个元素为一个<a href="https://www.showdoc.cc/meteva?page_id=3975600815874861">网格信息类</a>变量</td>
<td style="text-align: left;">例如当g = "grid", gll = [meb.grid([100,110,1],[20,30,1]), meb.grid([120,130,1],[40,50,1])]时,就可以提取位于西南南部和东北的两块矩形区域的数据,并分为2组</td>
</tr>
<tr>
<td style="text-align: left;">g等于其它可选项时</td>
<td style="text-align: left;">None</td>
<td style="text-align: left;">当g!=None时,按g参数对应的数据取值相同的分为一组,分组数量和数据取值的集合size一致,例如原始数据中包含54511, 54512, 54513三个站点,则会按站点号将所有相同站号的数据划分为一组,一共分为3组</td>
</tr>
<tr>
<td style="text-align: left;">同上</td>
<td style="text-align: left;">双层列表,其中内层列表的长度可以不固定,不同列表可重叠,如果内层列表size = 1,也可以不用列表形式,直接列出其中内容</td>
<td style="text-align: left;">按g参数对应的数据,根据内层列表所列值进行分组例如原始数据中包含54511, 54512, 54513三个站点,如果gll ==[54511,[54511,54512],[54512,54513]] 则分为3组,第一组包含54511站,第2组包含所有站号为54511和54512的数据,第3组包含所有54512和54513。</td>
</tr>
</tbody>
</table>
<p> <strong><font face="黑体" color=blue size=5>return</strong></font>: 有效的分组结果和分组方式,python元组数据,其中第一个元素为列表,列表中的元素为每个分组后的<a href="https://www.showdoc.cc/nmc?page_id=3744334022014027">站点数据</a>,元组的第二个元素为实际分类所采用的gll。在分组时,如果gll指定的分组里没有包含任何站点,则该分组参数会从gll中移除。</p>
<p><strong>调用示例</strong></p>
<pre><code class="language-python">result = meb.group(sta_all)
print(result[0])
print(result[1])#不分组,返回值的第一个元素为站点数据,第二个元素为None</code></pre>
<pre><code>[ level time dtime id lon lat ob grapes ec
0 1000 2019-12-31 08:00:00 0 54511 100 30 10 62 55
1 1000 2019-12-31 08:00:00 0 54522 110 40 10 7 45
2 850 2019-12-31 08:00:00 0 54511 100 30 10 16 7
3 850 2019-12-31 08:00:00 0 54522 110 40 10 28 76
4 1000 2020-01-01 20:00:00 0 54511 100 30 20 75 21
5 1000 2020-01-01 20:00:00 0 54522 110 40 20 4 74
6 850 2020-01-01 20:00:00 0 54511 100 30 20 20 46
7 850 2020-01-01 20:00:00 0 54522 110 40 20 44 47
8 1000 2019-12-31 08:00:00 24 54511 100 30 50 47 30
9 1000 2019-12-31 08:00:00 24 54522 110 40 50 75 81
10 850 2019-12-31 08:00:00 24 54511 100 30 50 5 999999
11 850 2019-12-31 08:00:00 24 54522 110 40 50 20 999999
12 1000 2020-01-01 20:00:00 24 54511 100 30 80 46 999999
13 1000 2020-01-01 20:00:00 24 54522 110 40 80 90 48
14 850 2020-01-01 20:00:00 24 54511 100 30 80 30 82
15 850 2020-01-01 20:00:00 24 54522 110 40 80 56 37]
None</code></pre>
<pre><code class="language-python">#按照ob列的值进行分组,每种不同的观测值分为一组
result = meb.group(sta_all,g = &quot;ob&quot;)
print(result[0])
print(result[1])</code></pre>
<pre><code>[ level time dtime id lon lat ob grapes ec
0 1000 2019-12-31 08:00:00 0 54511 100 30 10 62 55
1 1000 2019-12-31 08:00:00 0 54522 110 40 10 7 45
2 850 2019-12-31 08:00:00 0 54511 100 30 10 16 7
3 850 2019-12-31 08:00:00 0 54522 110 40 10 28 76, level time dtime id lon lat ob grapes ec
4 1000 2020-01-01 20:00:00 0 54511 100 30 20 75 21
5 1000 2020-01-01 20:00:00 0 54522 110 40 20 4 74
6 850 2020-01-01 20:00:00 0 54511 100 30 20 20 46
7 850 2020-01-01 20:00:00 0 54522 110 40 20 44 47, level time dtime id lon lat ob grapes ec
8 1000 2019-12-31 08:00:00 24 54511 100 30 50 47 30
9 1000 2019-12-31 08:00:00 24 54522 110 40 50 75 81
10 850 2019-12-31 08:00:00 24 54511 100 30 50 5 999999
11 850 2019-12-31 08:00:00 24 54522 110 40 50 20 999999, level time dtime id lon lat ob grapes ec
12 1000 2020-01-01 20:00:00 24 54511 100 30 80 46 999999
13 1000 2020-01-01 20:00:00 24 54522 110 40 80 90 48
14 850 2020-01-01 20:00:00 24 54511 100 30 80 30 82
15 850 2020-01-01 20:00:00 24 54522 110 40 80 56 37]
[10, 20, 50, 80]</code></pre>
<pre><code class="language-python">#按照ob列的值进行分组,分为两组,各组分别包含 ob 等于 10, 和ob等于20或50的样本
result = meb.group(sta_all,g = &quot;ob&quot;,gll = [[10],[20,50]])
print(result[0])
print(result[1])</code></pre>
<pre><code>[ level time dtime id lon lat ob grapes ec
0 1000 2019-12-31 08:00:00 0 54511 100 30 10 62 55
1 1000 2019-12-31 08:00:00 0 54522 110 40 10 7 45
2 850 2019-12-31 08:00:00 0 54511 100 30 10 16 7
3 850 2019-12-31 08:00:00 0 54522 110 40 10 28 76, level time dtime id lon lat ob grapes ec
4 1000 2020-01-01 20:00:00 0 54511 100 30 20 75 21
5 1000 2020-01-01 20:00:00 0 54522 110 40 20 4 74
6 850 2020-01-01 20:00:00 0 54511 100 30 20 20 46
7 850 2020-01-01 20:00:00 0 54522 110 40 20 44 47
8 1000 2019-12-31 08:00:00 24 54511 100 30 50 47 30
9 1000 2019-12-31 08:00:00 24 54522 110 40 50 75 81
10 850 2019-12-31 08:00:00 24 54511 100 30 50 5 999999
11 850 2019-12-31 08:00:00 24 54522 110 40 50 20 999999]
[[10], [20, 50]]</code></pre>
<pre><code class="language-python">#按照ec列的值进行分组,分为3组,各组分别是ec 列属于[0,30],[31,50],[51,100]等3个区间的值。
result = meb.group(sta_all,g = &quot;ec_range&quot;,gll = [[0,30],[31,50],[51,100]])
print(result[0])
print(result[1])</code></pre>
<pre><code>[ level time dtime id lon lat ob grapes ec
2 850 2019-12-31 08:00:00 0 54511 100 30 10 16 7
4 1000 2020-01-01 20:00:00 0 54511 100 30 20 75 21
8 1000 2019-12-31 08:00:00 24 54511 100 30 50 47 30, level time dtime id lon lat ob grapes ec
1 1000 2019-12-31 08:00:00 0 54522 110 40 10 7 45
6 850 2020-01-01 20:00:00 0 54511 100 30 20 20 46
7 850 2020-01-01 20:00:00 0 54522 110 40 20 44 47
13 1000 2020-01-01 20:00:00 24 54522 110 40 80 90 48
15 850 2020-01-01 20:00:00 24 54522 110 40 80 56 37, level time dtime id lon lat ob grapes ec
0 1000 2019-12-31 08:00:00 0 54511 100 30 10 62 55
3 850 2019-12-31 08:00:00 0 54522 110 40 10 28 76
5 1000 2020-01-01 20:00:00 0 54522 110 40 20 4 74
9 1000 2019-12-31 08:00:00 24 54522 110 40 50 75 81
14 850 2020-01-01 20:00:00 24 54511 100 30 80 30 82]
[[0, 30], [31, 50], [51, 100]]</code></pre>
<pre><code class="language-python">#按照grapes列的值进行分组,每个分组grapes的取值分别处于间距为20的不同区间
result = meb.group(sta_all,g = &quot;grapes_step&quot;,gll = [0,20])
print(result[0])
print(result[1])</code></pre>
<pre><code>[ level time dtime id lon lat ob grapes ec
1 1000 2019-12-31 08:00:00 0 54522 110 40 10 7 45
2 850 2019-12-31 08:00:00 0 54511 100 30 10 16 7
5 1000 2020-01-01 20:00:00 0 54522 110 40 20 4 74
10 850 2019-12-31 08:00:00 24 54511 100 30 50 5 999999, level time dtime id lon lat ob grapes ec
3 850 2019-12-31 08:00:00 0 54522 110 40 10 28 76
6 850 2020-01-01 20:00:00 0 54511 100 30 20 20 46
11 850 2019-12-31 08:00:00 24 54522 110 40 50 20 999999
14 850 2020-01-01 20:00:00 24 54511 100 30 80 30 82, level time dtime id lon lat ob grapes ec
7 850 2020-01-01 20:00:00 0 54522 110 40 20 44 47
8 1000 2019-12-31 08:00:00 24 54511 100 30 50 47 30
12 1000 2020-01-01 20:00:00 24 54511 100 30 80 46 999999
15 850 2020-01-01 20:00:00 24 54522 110 40 80 56 37, level time dtime id lon lat ob grapes ec
0 1000 2019-12-31 08:00:00 0 54511 100 30 10 62 55
4 1000 2020-01-01 20:00:00 0 54511 100 30 20 75 21
9 1000 2019-12-31 08:00:00 24 54522 110 40 50 75 81, level time dtime id lon lat ob grapes ec
13 1000 2020-01-01 20:00:00 24 54522 110 40 80 90 48]
[[0.0, 19.999999], [20.0, 39.999999], [40.0, 59.999999], [60.0, 79.999999], [80.0, 99.999999]]</code></pre>
<pre><code class="language-python">result = meb.group(sta_all,g =&quot;time&quot;) #group_list_list = None
print(result[0])
print(result[1]) #按起报时间分组,返回的第一个元素为两组站点数据构成的列表,第二个元素实际采用的分组方式</code></pre>
<pre><code>[ level time dtime id lon lat ob grapes ec
0 1000 2019-12-31 08:00:00 0 54511 100 30 10 62 55
1 1000 2019-12-31 08:00:00 0 54522 110 40 10 7 45
2 850 2019-12-31 08:00:00 0 54511 100 30 10 16 7
3 850 2019-12-31 08:00:00 0 54522 110 40 10 28 76
8 1000 2019-12-31 08:00:00 24 54511 100 30 50 47 30
9 1000 2019-12-31 08:00:00 24 54522 110 40 50 75 81
10 850 2019-12-31 08:00:00 24 54511 100 30 50 5 999999
11 850 2019-12-31 08:00:00 24 54522 110 40 50 20 999999, level time dtime id lon lat ob grapes ec
4 1000 2020-01-01 20:00:00 0 54511 100 30 20 75 21
5 1000 2020-01-01 20:00:00 0 54522 110 40 20 4 74
6 850 2020-01-01 20:00:00 0 54511 100 30 20 20 46
7 850 2020-01-01 20:00:00 0 54522 110 40 20 44 47
12 1000 2020-01-01 20:00:00 24 54511 100 30 80 46 999999
13 1000 2020-01-01 20:00:00 24 54522 110 40 80 90 48
14 850 2020-01-01 20:00:00 24 54511 100 30 80 30 82
15 850 2020-01-01 20:00:00 24 54522 110 40 80 56 37]
[Timestamp('2019-12-31 08:00:00'), Timestamp('2020-01-01 20:00:00')]</code></pre>
<pre><code class="language-python">result = meb.group(sta_all,g =&quot;time&quot;,gll = [[&quot;2019123108&quot;,&quot;2020010120&quot;],&quot;2020010120&quot;,&quot;2030010108&quot;])
print(result[0])#按指定方式的时间分组,分组结果中第一组包含了两天的数据样本,第二组包含了一天的数据样本
print(result[1]) #第三组没有包含数据样本,所以在结果中被删除了。</code></pre>
<pre><code>[ level time dtime id lon lat ob grapes ec
0 1000 2019-12-31 08:00:00 0 54511 100 30 10 62 55
1 1000 2019-12-31 08:00:00 0 54522 110 40 10 7 45
2 850 2019-12-31 08:00:00 0 54511 100 30 10 16 7
3 850 2019-12-31 08:00:00 0 54522 110 40 10 28 76
4 1000 2020-01-01 20:00:00 0 54511 100 30 20 75 21
5 1000 2020-01-01 20:00:00 0 54522 110 40 20 4 74
6 850 2020-01-01 20:00:00 0 54511 100 30 20 20 46
7 850 2020-01-01 20:00:00 0 54522 110 40 20 44 47
8 1000 2019-12-31 08:00:00 24 54511 100 30 50 47 30
9 1000 2019-12-31 08:00:00 24 54522 110 40 50 75 81
10 850 2019-12-31 08:00:00 24 54511 100 30 50 5 999999
11 850 2019-12-31 08:00:00 24 54522 110 40 50 20 999999
12 1000 2020-01-01 20:00:00 24 54511 100 30 80 46 999999
13 1000 2020-01-01 20:00:00 24 54522 110 40 80 90 48
14 850 2020-01-01 20:00:00 24 54511 100 30 80 30 82
15 850 2020-01-01 20:00:00 24 54522 110 40 80 56 37, level time dtime id lon lat ob grapes ec
4 1000 2020-01-01 20:00:00 0 54511 100 30 20 75 21
5 1000 2020-01-01 20:00:00 0 54522 110 40 20 4 74
6 850 2020-01-01 20:00:00 0 54511 100 30 20 20 46
7 850 2020-01-01 20:00:00 0 54522 110 40 20 44 47
12 1000 2020-01-01 20:00:00 24 54511 100 30 80 46 999999
13 1000 2020-01-01 20:00:00 24 54522 110 40 80 90 48
14 850 2020-01-01 20:00:00 24 54511 100 30 80 30 82
15 850 2020-01-01 20:00:00 24 54522 110 40 80 56 37]
[['2019123108', '2020010120'], ['2020010120']]</code></pre>
<pre><code class="language-python">result = meb.group(sta_all,g =&quot;time_range&quot;,gll = [[&quot;2019123108&quot;,&quot;2020010108&quot;],[&quot;2020010120&quot;,&quot;2020010220&quot;]])
print(result[0])#按指定方式的时间分组,每一组根据列表给出的起止时间选取相应的数据,一共分成了2组
print(result[1]) </code></pre>
<pre><code>[ level time dtime id lon lat ob grapes ec
0 1000 2019-12-31 08:00:00 0 54511 100 30 10 62 55
1 1000 2019-12-31 08:00:00 0 54522 110 40 10 7 45
2 850 2019-12-31 08:00:00 0 54511 100 30 10 16 7
3 850 2019-12-31 08:00:00 0 54522 110 40 10 28 76
8 1000 2019-12-31 08:00:00 24 54511 100 30 50 47 30
9 1000 2019-12-31 08:00:00 24 54522 110 40 50 75 81
10 850 2019-12-31 08:00:00 24 54511 100 30 50 5 999999
11 850 2019-12-31 08:00:00 24 54522 110 40 50 20 999999, level time dtime id lon lat ob grapes ec
4 1000 2020-01-01 20:00:00 0 54511 100 30 20 75 21
5 1000 2020-01-01 20:00:00 0 54522 110 40 20 4 74
6 850 2020-01-01 20:00:00 0 54511 100 30 20 20 46
7 850 2020-01-01 20:00:00 0 54522 110 40 20 44 47
12 1000 2020-01-01 20:00:00 24 54511 100 30 80 46 999999
13 1000 2020-01-01 20:00:00 24 54522 110 40 80 90 48
14 850 2020-01-01 20:00:00 24 54511 100 30 80 30 82
15 850 2020-01-01 20:00:00 24 54522 110 40 80 56 37]
[['2019123108', '2020010108'], ['2020010120', '2020010220']]</code></pre>
<pre><code class="language-python">grid1 = meb.grid([95,105,1],[25,35,1])
grid2 = meb.grid([105,115,1],[35,45,1])
result = meb.group(sta_all,g =&quot;grid&quot;,gll = [grid1,grid2])
print(result[0])#按指定网格区域,一共分成了2组
print(result[1]) </code></pre>
<pre><code>[ level time dtime id lon lat ob grapes ec
0 1000 2019-12-31 08:00:00 0 54511 100 30 10 62 55
2 850 2019-12-31 08:00:00 0 54511 100 30 10 16 7
4 1000 2020-01-01 20:00:00 0 54511 100 30 20 75 21
6 850 2020-01-01 20:00:00 0 54511 100 30 20 20 46
8 1000 2019-12-31 08:00:00 24 54511 100 30 50 47 30
10 850 2019-12-31 08:00:00 24 54511 100 30 50 5 999999
12 1000 2020-01-01 20:00:00 24 54511 100 30 80 46 999999
14 850 2020-01-01 20:00:00 24 54511 100 30 80 30 82, level time dtime id lon lat ob grapes ec
1 1000 2019-12-31 08:00:00 0 54522 110 40 10 7 45
3 850 2019-12-31 08:00:00 0 54522 110 40 10 28 76
5 1000 2020-01-01 20:00:00 0 54522 110 40 20 4 74
7 850 2020-01-01 20:00:00 0 54522 110 40 20 44 47
9 1000 2019-12-31 08:00:00 24 54522 110 40 50 75 81
11 850 2019-12-31 08:00:00 24 54522 110 40 50 20 999999
13 1000 2020-01-01 20:00:00 24 54522 110 40 80 90 48
15 850 2020-01-01 20:00:00 24 54522 110 40 80 56 37]
[&lt;meteva.base.basicdata.grid.grid object at 0x0000022F2628F488&gt;, &lt;meteva.base.basicdata.grid.grid object at 0x0000022F2628FBC8&gt;]</code></pre>
<pre><code class="language-python">result = meb.group(sta_all,g = &quot;lat_step&quot;,gll = [30,5])
print(result[0])#按指定网格区域,一共分成了2组
print(result[1]) </code></pre>
<pre><code>[ level time dtime id lon lat ob grapes ec
0 1000 2019-12-31 08:00:00 0 54511 100 30 10 62 55
2 850 2019-12-31 08:00:00 0 54511 100 30 10 16 7
4 1000 2020-01-01 20:00:00 0 54511 100 30 20 75 21
6 850 2020-01-01 20:00:00 0 54511 100 30 20 20 46
8 1000 2019-12-31 08:00:00 24 54511 100 30 50 47 30
10 850 2019-12-31 08:00:00 24 54511 100 30 50 5 999999
12 1000 2020-01-01 20:00:00 24 54511 100 30 80 46 999999
14 850 2020-01-01 20:00:00 24 54511 100 30 80 30 82, level time dtime id lon lat ob grapes ec
1 1000 2019-12-31 08:00:00 0 54522 110 40 10 7 45
3 850 2019-12-31 08:00:00 0 54522 110 40 10 28 76
5 1000 2020-01-01 20:00:00 0 54522 110 40 20 4 74
7 850 2020-01-01 20:00:00 0 54522 110 40 20 44 47
9 1000 2019-12-31 08:00:00 24 54522 110 40 50 75 81
11 850 2019-12-31 08:00:00 24 54522 110 40 50 20 999999
13 1000 2020-01-01 20:00:00 24 54522 110 40 80 90 48
15 850 2020-01-01 20:00:00 24 54522 110 40 80 56 37]
[[30.0, 34.999999], [40.0, 44.999999]]</code></pre>
<pre><code class="language-python">sta_all[&quot;div&quot;] = (np.random.randn(16) * 100).astype(np.int16)
print(sta_all) # 增加一列数据作为分组的依据,它可以是散点,涡度,下垫面类型等等</code></pre>
<pre><code> level time dtime id lon lat ob grapes ec div
0 1000 2019-12-31 08:00:00 0 54511 100 30 10 62 55 -28
1 1000 2019-12-31 08:00:00 0 54522 110 40 10 7 45 118
2 850 2019-12-31 08:00:00 0 54511 100 30 10 16 7 45
3 850 2019-12-31 08:00:00 0 54522 110 40 10 28 76 -109
4 1000 2020-01-01 20:00:00 0 54511 100 30 20 75 21 53
5 1000 2020-01-01 20:00:00 0 54522 110 40 20 4 74 0
6 850 2020-01-01 20:00:00 0 54511 100 30 20 20 46 -131
7 850 2020-01-01 20:00:00 0 54522 110 40 20 44 47 -49
8 1000 2019-12-31 08:00:00 24 54511 100 30 50 47 30 -71
9 1000 2019-12-31 08:00:00 24 54522 110 40 50 75 81 34
10 850 2019-12-31 08:00:00 24 54511 100 30 50 5 999999 -258
11 850 2019-12-31 08:00:00 24 54522 110 40 50 20 999999 -62
12 1000 2020-01-01 20:00:00 24 54511 100 30 80 46 999999 10
13 1000 2020-01-01 20:00:00 24 54522 110 40 80 90 48 -49
14 850 2020-01-01 20:00:00 24 54511 100 30 80 30 82 -190
15 850 2020-01-01 20:00:00 24 54522 110 40 80 56 37 -8</code></pre>
<pre><code class="language-python">result = meb.group(sta_all,g = &quot;last_range&quot;,gll =[[-200,0],[0,200]])
print(result[0])#根据最后一列数据分组,假设div代表散度的话,这样可将数据样本分为散度为正和为负的两组样本
print(result[1]) </code></pre>
<pre><code>[ level time dtime id lon lat ob grapes ec
0 1000 2019-12-31 08:00:00 0 54511 100 30 10 62 55
3 850 2019-12-31 08:00:00 0 54522 110 40 10 28 76
5 1000 2020-01-01 20:00:00 0 54522 110 40 20 4 74
6 850 2020-01-01 20:00:00 0 54511 100 30 20 20 46
7 850 2020-01-01 20:00:00 0 54522 110 40 20 44 47
8 1000 2019-12-31 08:00:00 24 54511 100 30 50 47 30
11 850 2019-12-31 08:00:00 24 54522 110 40 50 20 999999
13 1000 2020-01-01 20:00:00 24 54522 110 40 80 90 48
14 850 2020-01-01 20:00:00 24 54511 100 30 80 30 82
15 850 2020-01-01 20:00:00 24 54522 110 40 80 56 37, level time dtime id lon lat ob grapes ec
1 1000 2019-12-31 08:00:00 0 54522 110 40 10 7 45
2 850 2019-12-31 08:00:00 0 54511 100 30 10 16 7
4 1000 2020-01-01 20:00:00 0 54511 100 30 20 75 21
5 1000 2020-01-01 20:00:00 0 54522 110 40 20 4 74
9 1000 2019-12-31 08:00:00 24 54522 110 40 50 75 81
12 1000 2020-01-01 20:00:00 24 54511 100 30 80 46 999999]
[[-200, 0], [0, 200]]</code></pre>
<pre><code class="language-python">result = meb.group(sta_all,g = &quot;last_step&quot;,gll =[0,100])
print(result[0])#根据最后一列数据分组,假设div代表散度的话,这样可将数据样本分为散度为不同的取值区间是的多组样本
print(result[1]) </code></pre>
<pre><code>[ level time dtime id lon lat ob grapes ec
10 850 2019-12-31 08:00:00 24 54511 100 30 50 5 999999, level time dtime id lon lat ob grapes ec
3 850 2019-12-31 08:00:00 0 54522 110 40 10 28 76
6 850 2020-01-01 20:00:00 0 54511 100 30 20 20 46
14 850 2020-01-01 20:00:00 24 54511 100 30 80 30 82, level time dtime id lon lat ob grapes ec
0 1000 2019-12-31 08:00:00 0 54511 100 30 10 62 55
7 850 2020-01-01 20:00:00 0 54522 110 40 20 44 47
8 1000 2019-12-31 08:00:00 24 54511 100 30 50 47 30
11 850 2019-12-31 08:00:00 24 54522 110 40 50 20 999999
13 1000 2020-01-01 20:00:00 24 54522 110 40 80 90 48
15 850 2020-01-01 20:00:00 24 54522 110 40 80 56 37, level time dtime id lon lat ob grapes ec
2 850 2019-12-31 08:00:00 0 54511 100 30 10 16 7
4 1000 2020-01-01 20:00:00 0 54511 100 30 20 75 21
5 1000 2020-01-01 20:00:00 0 54522 110 40 20 4 74
9 1000 2019-12-31 08:00:00 24 54522 110 40 50 75 81
12 1000 2020-01-01 20:00:00 24 54511 100 30 80 46 999999, level time dtime id lon lat ob grapes ec
1 1000 2019-12-31 08:00:00 0 54522 110 40 10 7 45]
[[-300.0, -200.000001], [-200.0, -100.000001], [-100.0, -1e-06], [0.0, 99.999999], [100.0, 199.999999]]</code></pre>
<pre><code class="language-python">grid0 = meb.grid([100,102,1],[20,22,1],gtime=[&quot;2019013108&quot;],dtime_list = [24],level_list = [500,700],member_list = [&quot;GRAPES&quot;])
x= np.arange(3)
y= np.arange(3)
dat = np.array(np.meshgrid(x,y))
grd = meb.grid_data(grid0,dat) #根据网格信息和numpy数组生成网格数
print(grd)</code></pre>
<pre><code>&lt;xarray.DataArray 'data0' (member: 1, level: 2, time: 1, dtime: 1, lat: 3, lon: 3)&gt;
array([[[[[[0, 1, 2],
[0, 1, 2],
[0, 1, 2]]]],
[[[[0, 0, 0],
[1, 1, 1],
[2, 2, 2]]]]]])
Coordinates:
* member (member) &lt;U6 'GRAPES'
* level (level) int32 500 700
* time (time) datetime64[ns] 2019-01-31T08:00:00
* dtime (dtime) int32 24
* lat (lat) int32 20 21 22
* lon (lon) int32 100 101 102</code></pre>
<pre><code class="language-python">grd_list = meb.group_grd(grd,g = &quot;level&quot;)
print(grd_list)</code></pre>
<pre><code>[&lt;xarray.DataArray 'data0' (member: 1, level: 1, time: 1, dtime: 1, lat: 3, lon: 3)&gt;
array([[[[[[0, 1, 2],
[0, 1, 2],
[0, 1, 2]]]]]])
Coordinates:
* member (member) &lt;U6 'GRAPES'
* level (level) int32 500
* time (time) datetime64[ns] 2019-01-31T08:00:00
* dtime (dtime) int32 24
* lat (lat) int32 20 21 22
* lon (lon) int32 100 101 102, &lt;xarray.DataArray 'data0' (member: 1, level: 1, time: 1, dtime: 1, lat: 3, lon: 3)&gt;
array([[[[[[0, 0, 0],
[1, 1, 1],
[2, 2, 2]]]]]])
Coordinates:
* member (member) &lt;U6 'GRAPES'
* level (level) int32 700
* time (time) datetime64[ns] 2019-01-31T08:00:00
* dtime (dtime) int32 24
* lat (lat) int32 20 21 22
* lon (lon) int32 100 101 102]</code></pre>