首页 > 解决方案 > 使用 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 转换,但不能完全弄清楚如何让它正常工作。

对此的任何帮助将不胜感激。

标签: pythonpandaspandas-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])

希望这可以帮助。


推荐阅读