这是我的问题。
我有一个数据框 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
