Соответствующие строки в цикле for в Python - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть pandas dataframe df, который выглядит следующим образом

enter image description here

df = {'Regions': {0: 'REGION1', 1: 'REGION2'}, 'x': {0: '1249-43,1269-12,1280-12', 1: '1267-12,1269-12,1280-12'}}

и список растровых файлов с именем rasters

rasters = 'SI_1206-33_50cm.tif', 'SI_1249-43_50cm.tif', 'SI_1269-12_50cm.tif', 'SI_1267-12_50cm.tif', 'SI_3865-17_50cm.tif' 

Я хотел бы создать новый список всех записей в rasters, соответствующих строкам в df.x для каждого региона.

for index, row in df.iterrows():
    region = row['Regions']
    tiffs = row['x']
    rasterlist = []
    for raster in rasters:
        if raster in tiffs:
            rasterlist = rasterlist.append(raster)
            print(rasterlist)

Какрезультат при переборе растров, я пытаюсь получить для первой итерации rasterlist, содержащий 'SI_1249-43_50cm.tif' и 'SI_1269-12_50cm.tif' для REGION1, и для второй итерации rasterlist, содержащий только 'SI_1267-12_50cm.tif' для REGION2.Список rasterlist, который я хотел бы использовать в качестве входных данных для дальнейшей обработки с использованием функции MosaicToNewRaster_management в arcpy.

Что не похоже на работу с этим кодом, так это сопоставление с шаблоном, я получаю пустойrasterlist переменная для каждой итерации.Я предполагаю, что это так, потому что различные элементы списка в df.x разделены запятой, и функция in, похоже, не работает.Вот где я застрял и надеюсь получить некоторую информацию.

1 Ответ

0 голосов
/ 19 декабря 2018

Вы проверяете в неправильном направлении.Вы используете

if raster in tiffs

, но tiffs это просто что-то вроде '1249-43,1269-12,1280-12', в котором явно нет ни одного растра. Вам нужно разделить список tiff и проверить в обратном направлении, чтобы увидеть,любой из tiff находится в растрах.

tiffs = row['x'].split(',')
raster_list = []
for raster in rasters:
    for tiff in tiffs:
        if tiff in raster:
            raster_list.append(raster)
            # Assuming each tiff matches with only one raster
            # you can break to save some time here.
            break
print(raster_list)

Если бы вы могли рассказать нам больше о отображении между растрами и tiff, то, возможно, есть что-то более эффективное, что можно сделать, используя dict s или set s.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...