Многомерный массив порядка Python с нулевыми значениями - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь отсортировать многомерный массив на основе массива в массиве, который является датой-временем.

Я пытался

sorted_array = sorted(array, lambda r: r[0])

Однако я не могу сравнить ошибки.

TypeError: can't compare datetime.datetime to NoneType

Подмассивы должны быть отсортированы в том же порядке, что и массив datetime.

Вот пример вывода, на который я бы надеялся.

ar = [[datetime.datetime(2018, 4, 11, 4, 0, 30,tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=0, name=None)), datetime.datetime(2018, 4, 11, 4, 0, 29, zinfo=psycopg2.tz.FixedOffsetTimezone(offset=0, name=None)), datetime.datetime(2018, 4, 11, 4, 0, 28, zinfo=psycopg2.tz.FixedOffsetTimezone(offset=0, name=None))]],[None,2,1],[None,2,1],[None,2,1]]

будет заказан как

ar = [[datetime.datetime(2018, 4, 11, 4, 0, 28,tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=0, name=None)), datetime.datetime(2018, 4, 11, 4, 0, 29, zinfo=psycopg2.tz.FixedOffsetTimezone(offset=0, name=None)), datetime.datetime(2018, 4, 11, 4, 0, 30, zinfo=psycopg2.tz.FixedOffsetTimezone(offset=0, name=None))]],[1,2,None],[1,2,None],[1,2,None]]

EDIT:

Мне удалось найти решение, преобразовав массив в Pandas DataFrame

dataframe = df(ar)
sorted_data = dataframe.sort_values([0],axis=1).values

Однако я не уверен, действительно ли это лучший подход. Кроме того, по какой-либо причине 1 из моих datetime, похоже, преобразуется в метку времени, когда превращается в фрейм данных. Не уверен почему. Хотя сортировка дает мне именно то, что я хочу.

1 Ответ

0 голосов
/ 11 мая 2018

Вы можете заказать каждый вложенный массив в соответствии с вложенным массивом дат следующим образом:

sorted_ar= [ sorted(ar[0]) , [x for _,x in sorted(zip(ar[0],ar[1]))] , 
[x for _,x in sorted(zip(ar[0],ar[2]))] ]
  • sorted(ar[0]) сортирует первый подмассив (подмассив дат) обычно

  • [x for _,x in sorted(zip(ar[0],ar[1]))] здесь я архивирую каждые два соответствующих элемента из подмассива даты и одного из подмассивов данных с плавающей запятой, затем сортирую zip и добавляю часть пары с плавающей точкой в ​​новый список.

  • Наконец, поместите упорядоченные списки в новый массив "sorted_ar

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