我有一个天气数据的数据框,如下所示:
+----+------------+----------+-----------+ | 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转换,但无法完全弄清楚如何使其正常工作。
任何帮助,将不胜感激。
答案 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])
希望这会有所帮助。