熊猫-如何在列中查找一组值,如果存在则在另一列中返回值

时间:2018-07-17 17:04:14

标签: python pandas

我是熊猫新手。我有一个csv文件,其中包含一个经度和纬度列以及一个图块ID列,该文件大约有100万行。我有大约一百个图块ID的列表,想要获取这些图块ID的纬度和经度坐标。目前我有:

good_tiles_str = [str(q) for q in good_tiles]#setting list elements to string data type
file['tile'] = file.tile.astype(str)#setting title column to string data type

for i in range (len(good_tiles_str)):
     x = good_tiles_str[i]
     lat = file.loc[file['tile'].str.contains(x), 'BL_Latitude'] #finding lat coordinates
     long = file.loc[file['tile'].str.contains(x), 'BL_Longitude'] #finding long coordinates
print(lat)
print(long)

此方法非常慢,我知道这不是正确的方法,因为我听说您在使用熊猫时不应使用像这样的循环。此外,由于找不到瓷砖ID的所有纬度和经度点,因此无法正常工作

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

据我所知,没有必要显式地迭代行。

如果希望给特定的分配条件,则可以明确地这样做。这是使用numpy.where;的一种方法;我们用〜表示“负数”。

rule1= file['tile'].str.contains(x)
rule2= file['tile'].str.contains(x)

file['flag'] = np.where(rule1 , 'BL_Latitude', " " )
file['flag'] = np.where(rule2 & ~rule1, 'BL_Longitude', file['flag'])

答案 1 :(得分:0)

尝试一下:

search_for = '|'.join(good_tiles_str)
good = file[file.tile.str.contains(search_for)]
good = good[['BL_Latitude', 'BL_Longitude']].drop_duplicates()