2015-06-18 2 views
0

Я изо всех сил пытаюсь понять, как работает itertools.groupby. У меня есть таблица Excel, у которой есть даты поставки в первом столбце, за которым следует пункт назначения Lat в столбце 2 и пункт назначения Lon в столбце 3. Раньше я получал помощь в группировке дат, которые были одинаковыми, в подмассивах большего массива, который содержит их. Вот код, который это делает.Itertools Groupby Вопросы

with xlrd.open_workbook(file_location) as workbook: 
    sheet = workbook.sheet_by_index(0) 

    Dates = (sheet.cell_value(i,0) for i in range(sheet.nrows)) 
    Day = [list(group) for key, group in itertools.groupby(Dates)] 

Теперь мне нужно сделать шаг дальше и группировать Lat в один массив и Lon в другой массив, но сгруппировать их изо дня в день. Я попытался объединить приведенный выше код с чем-то вроде этого, но я не знаю, как включить переменные Lat и Lon в функцию group it.

with xlrd.open_workbook(file_location) as workbook: 
    sheet = workbook.sheet_by_index(0) 

    for i in range(sheet.nrows): 
     Lat = (sheet.cell_value(i,2) for i in range(sheet.nrows)) 
     DeliveryX = [list(group) for key, group in itertools.groupby(Dates)] 
     Lon = (sheet.cell_value(i,3) for i in range(sheet.nrows)) 
     DeliveryY = [list(group) for key, group in itertools.groupby(Dates)] 

ответ

0

groupby принимает key аргумент, чтобы решить, как сгруппировать значения в данном списке. Вы бы по существу сделать итератор кортежей, как:

t = ((lat, lon, date), (lat, lon, date), ...) 

Вы можете достичь этого путем вызова itertools.izip(Lat, Lon, Dates). Затем, чтобы поместить этот список в группы, сравнив третьи поля и извлеките первый и второй, вы можете написать

lats = [[i[0] for i in g] for k, g in groupby(t, key=lambda x: x[2])] 
lats = [[i[1] for i in g] for k, g in groupby(t, key=lambda x: x[2])] 

 Смежные вопросы

  • Нет связанных вопросов^_^