python - 将风向字典映射到新列
问题描述
我有一个带有风向的大型数据框,我想创建一个新列,将此信息映射到气象罗盘的 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
推荐阅读
- kubernetes - atching kube-system aws-node daemonset 失败,json 无效
- c# - 具有受保护设置器的可空属性,推断为朋友(内部)字段
- android - 所有产品风味都连接到一个构建变体
- google-analytics - Google Analytics - 搜索类别的高级搜索过滤器
- reactjs - 重定向链接到地图路线
- javascript - JavaScript new formData().append 不适用于上传的文件
- raku - 语法行为是否在 6.c 和 6.d 之间中断?
- pdf - 以 PDF 格式导出多个剑道网格
- javascript - 如何使用 Javascript 在移动 Safari 和所有其他浏览器上录制音频?
- python-2.7 - 我将如何用更长的密码来加密这个字符串?