这是我的问题。
我有一个数据框 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
这就是我现在可以处理的问题:
rhc ssh appname
我的方法不灵活且倾倒 任何人都可以提供一些建议,以高效率处理这样的分类问题(数字范围到某些字符)。
答案 0 :(得分:6)
做这类事情的一个好方法是使用numpy.digitize()。它需要一个二进制数组和值数组,并返回每个值落入哪个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
答案 1 :(得分:2)
您可以使用loc
:
import pandas as pd
df = pd.DataFrame({"wd": pd.Series([20.1,50,8.4 ])})
print df
wd
0 20.1
1 50.0
2 8.4
print (df.wd >= 11.25 ) & (df.wd < 33.75 )
0 True
1 False
2 False
Name: wd, dtype: bool
df.loc[(df.wd >= 11.25 ) & (df.wd < 33.75 ), 'new'] = 'NNE'
df.loc[(df.wd >= 33.75 ) & (df.wd < 56.25 ), 'new'] = 'NE'
print df
wd new
0 20.1 NNE
1 50.0 NE
2 8.4 NaN