Skip to main content
 首页 » 编程设计

python之将风向分为几类

2025年05月04日8lori

这是我的问题。
我有一个数据框 df,其中包含名为 date 和 wd 的两列。
而wd表示风向,范围为(0~360)。
因此,df 代表特定时间范围内某地的风向。

我想像这样将这些风向分为 16 类:
http://7xrn7f.com1.z0.glb.clouddn.com/16-3-8/30080798.jpg

此处显示范围。

http://7xrn7f.com1.z0.glb.clouddn.com/16-3-8/8398960.jpg

这是我现在可以处理的:

wd_stat = [] 
for i in range(0,len(df),1): 
    wd = df.wd.iloc[i] 
    ### NNE 11.25-33.75 
    if 11.25 <= wd < 33.75: 
       wd_stat.append("NNE")     
    ### NE 33.75-56.25    
    if (33.75 <=wd < 56.25): 
       wd_stat.append("NE") 
    ### ENE 56.25 - 78.75     
    if (56.25 <=wd < 78.75): 
       wd_stat.append("ENE")  
    if (78.75 <=wd < 101.25): 
       wd_stat.append("E")  
    if (101.25 <=wd < 123.75): 
        wd_stat.append("ESE")  
      .....not done yet...... 

我的方法很死板,很垃圾。
任何人都可以提供一些建议来高效处理这样的分类问题(数字范围到某些字符)。

请您参考如下方法:

做这些事情的一个好方法是使用 numpy.digitize() .它采用 bin 和值的数组,并返回每个值所属的 bin 的索引。在匹配的字符串数组中使用这些索引来获取您想要的内容:

import numpy as np 
import pandas as pd 
 
df = pd.DataFrame({"wd": pd.Series([20.1,50,8.4,359,243,123])}) 
 
directions = np.array('N NNE NE ENE E ESE SE SSE S SSW SW WSW W WNW NW NNW N'.split()) 
bins = np.arange(11.25, 372, 22.5) 
df['wd_stat'] = directions[np.digitize(df['wd'], bins)] 
print df 
 
      wd wd_stat 
0   20.1     NNE 
1   50.0      NE 
2    8.4       N 
3  359.0       N 
4  243.0     WSW 
5  123.0     ESE