python - 使用 groupby 从 API 查找创建新列
问题描述
我有一个天气日期数据框,如下所示:
+----+------------+----------+------------+ | 身份证 | Station_ID | 纬度 | 经度 | +----+------------+----------+------------+ | 0 | 6010400 | 52.93 | -82.43 | | 1 | 6010400 | 52.93 | -82.43 | | 2 | 6010400 | 52.93 | -82.43 | | 3 | 616I001 | 45.07 | -77.88 | | 4 | 616I001 | 45.07 | -77.88 | | 5 | 616I001 | 45.07 | -77.88 | +----+------------+----------+------------+
我想创建一个名为postal_code
使用基于纬度和经度值的 API 查找的新列。我无法对数据框中的每一行进行查找,因为这样做效率很低,因为有超过 500,000 行且只有 186 个 unique Station_IDs
。由于我需要使用的 API 的速率限制,这也是不可行的。
我相信我需要执行 groupby 转换,但不能完全弄清楚如何让它正常工作。
对此的任何帮助将不胜感激。
解决方案
我相信,您只能将 groupby 用于聚合,这不是您想要的。
首先结合“纬度”和“经度”。它提供了一个带有元组的新列。
df['coordinates'] = list(zip(df['Latitude'],df['Longitude']))
然后,您可以使用此“坐标”列使用set
数据类型创建 (Latitude,Longitude) 的所有唯一值,因此它不包含重复项。
set(list(df['coordinates']))
然后如您所说,使用 API 调用获取这些坐标的邮政编码,并将它们存储为字典。然后你可以使用这个字典来填充每一行的邮政编码。
postal_code_dict = {'key':'value'} #sample dictionary
df['postal_code'] = df['coordinates'].apply(lambda x: postal_code_dict[x])
希望这可以帮助。
推荐阅读
- angular - 以角度初始化数据的正确位置
- python - Python Pandas 只能比较相同标签的系列对象
- arrays - bash - 调用 jq 生成语法错误和 INVALID_CHARACTER 消息
- swiftui - 登录后的 SwiftUI 导航
- java - 在java中使用正则表达式进行值比较
- html - 仅显示大型单个 HTML 文件的一部分
- javascript - 基于javascript中的另一个数组对数组进行排序
- java - 将 Java 数据类转换为前端的字段/元数据数组(类似于 Swagger 数据模型/模式)?
- vue.js - VueJS 更新侧边栏组件
- javascript - 如何在引导程序 4 中制作相等的 5 列?