首页 > 解决方案 > 慢循环python在python的antoher数据框中搜索数据

问题描述

我有两个数据框:一个包含我的所有数据(称为“数据”),一个包含每个观测开始和结束的不同站点的纬度和经度(称为“信息”),我试图在我的位置获得一个数据框在每个观察中,每个站点旁边都会有纬度和经度,我在 python 中的代码:

for i in range(0,15557580):
    for j in range(0,542):
         if data.year[i] == '2018' and data.station[i]==info.station[j]:
             data.latitude[i] = info.latitude[j]
             data.longitude[i] = info.longitude[j]
             break

但是由于我有大约 1500 万次观察,所以这样做需要很多时间,有没有更快的方法呢?

非常感谢(我还是新手)

编辑 :

我的文件信息是这样的(大约 500 个观察,每个站一个)

在此处输入图像描述

我的文件数据是这样的(这里没有显示其他变量)(大约 1500 万次观察,每次旅行一个)

在此处输入图像描述

我希望得到的是,当站号匹配时,结果数据将如下所示:

在此处输入图像描述

标签: pythonpandasdataframe

解决方案


这是一种解决方案。您还可以使用pandas.merge添加 2 个新列data并执行等效映射。

# create series mappings from info
s_lat = info.set_index('station')['latitude']
s_lon = info.set_index('station')['latitude']

# calculate Boolean mask on year
mask = data['year'] == '2018'

# apply mappings, if no map found use fillna to retrieve original data
data.loc[mask, 'latitude'] = data.loc[mask, 'station'].map(s_lat)\
                                 .fillna(data.loc[mask, 'latitude'])

data.loc[mask, 'longitude'] = data.loc[mask, 'station'].map(s_lon)\
                                  .fillna(data.loc[mask, 'longitude'])

推荐阅读