使用groupby从API查找创建新列

时间:2019-06-06 17:26:08

标签: python pandas pandas-groupby

我有一个天气数据的数据框,如下所示:

+----+------------+----------+-----------+
| ID | Station_ID | Latitude | Longitude |
+----+------------+----------+-----------+
|  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 |
+----+------------+----------+-----------+

我想使用基于纬度和经度值的API查找来创建名为postal_code的新列。我无法对数据帧中的每一行执行查找,因为这样会造成效率低下,因为有超过500,000行,并且只有186个唯一的Station_IDs。由于我需要使用的API上的速率限制,这也是不可行的。

我相信我需要执行groupby转换,但无法完全弄清楚如何使其正常工作。

任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:0)

我相信,您只能将groupby用于聚合,这不是您想要的。

首先将“纬度”和“经度”组合在一起。它给出了一个带有元组的新列。

df['coordinates'] = list(zip(df['Latitude'],df['Longitude']))

然后,您可以使用此“坐标”列使用set数据类型创建(纬度,经度)的所有唯一值,因此它不包含重复项。

set(list(df['coordinates']))

然后使用您所说的API调用获取这些坐标的邮政编码,并将其存储为字典。 然后,您可以使用此字典填充每一行的邮政编码。

postal_code_dict = {'key':'value'} #sample dictionary
df['postal_code'] = df['coordinates'].apply(lambda x: postal_code_dict[x])

希望这会有所帮助。