python - 将风向字典映射到新列

标签 python python-3.x pandas

我有一个带有风向的大型数据框,我想创建一个新列,将此信息映射到气象罗盘的 16 个部分,即。 N、NNE 等。我已经创建了一个包含键和值的字典,但是当我运行代码时,我的新列仅包含 NaN。这是我的数据和代码的示例。我不确定我到底哪里出了问题...感谢您的帮助。

time    temperature windBearing windSpeed   ozone   pressure
0   2018-09-20 01:00:00 18.46   228 5.76    291.0   1014.5
1   2018-09-20 02:00:00 18.05   214 5.36    292.1   1014.5
2   2018-09-20 03:00:00 18.07   214 5.58    292.1   1014.3
3   2018-09-20 04:00:00 18.19   216 5.99    291.9   1013.9
4   2018-09-20 05:00:00 18.31   218 6.31    291.9   1013.5

角度词典:

compass = {
    range(349, 11) : 'N',
    range(11, 34) : 'NNE',
    range(34, 56) : 'NE',
    range(56, 79) : 'ENE',
    range(79, 101) : 'E',
    range(101, 124) : 'ESE',
    range(124, 146) : 'SE',
    range(146, 169) : 'SSE',
    range(169, 191) : 'S',
    range(191, 214) : 'SSW',
    range(214, 236) : 'SW',
    range(236, 259) : 'WSW',
    range(259, 281) : 'w',
    range(281, 304) : 'WNW',
    range(304, 326) : 'NW',
    range(326, 349) : 'NNW'    
}

正在运行的代码:

df_met['compass'] = df_met['windBearing'].map(compass)

最佳答案

您的想法是正确的,但 map 在一对一的级别上工作,因此您无法匹配范围。

相反,让我们从您的罗盘字典创建一个新的数据框,并将值合并到您的数据框中。

df_dict = {}

for k,v in compass.items():
    for item in k:
        df_dict[int(item)] = v

wind_df = pd.DataFrame.from_dict(df_dict,orient='index').reset_index()
wind_df.columns=['windBearing', 'State']

new_df = pd.merge(wind,wind_df,on=['windBearing'],how='left')
<小时/>
print(new_df)

                       time  temperature  windBearing  windSpeed  ozone  \
0  0   2018-09-20 01:00:00         18.46          228       5.76  291.0   
1  1   2018-09-20 02:00:00         18.05          214       5.36  292.1   
2  2   2018-09-20 03:00:00         18.07          214       5.58  292.1   
3  3   2018-09-20 04:00:00         18.19          216       5.99  291.9   
4  4   2018-09-20 05:00:00         18.31          218       6.31  291.9   

   pressure State  
0    1014.5    SW  
1    1014.5    SW  
2    1014.3    SW  
3    1013.9    SW  
4    1013.5    SW  

关于python - 将风向字典映射到新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60249618/

相关文章:

python - VS代码无法导入已安装的模块

python - 在Python中写入文件时数据被切断

python - 如何从不同的文件导入Python函数(在Ubuntu中)

python - Django:无法在指定中间模型的 ManyToManyField 上设置值

python - 保留列名的最后 2 个元素,用管道分隔 python pandas

python - 如何查找两行数据之间的相似性

python - 按单个字符分组,否则拆分

python - 将类 'pandas.indexes.numeric.Int64Index' 转换为 numpy

python - 如何计算pandas数据框中某些条件的比率

python - pydot 和 graphviz 错误 : Couldn't import dot_parser, 无法加载点文件