Ввод
Мои данные содержатся в кадре данных pandas (в столбце). Ради этой проблемы предположим, что это выглядит примерно так (где мы используем небольшую версию небольшого представления кадра данных):
array([['i', 101505.92499994699, 'A'],
['m', 101624.589999905, 'A'],
['i', 101686.209999956, 'B'],
['o', 101696.209999956, 'A'],
['p', 101738.094999921, 'A'],
['m', 101803.725000005, 'B'],
['o', 101847.539999988, 'A'],
['p', 101943.93000006699, 'B'],
['o', 102031.829999993, 'B'],
['r', 102064.49000001901, 'A'],
['r', 102175.569999963, 'B'],
['a', 102215.54500004301, 'A'],
['n', 102352.590000024, 'A'],
['a', 102379.3899999, 'B'],
['t', 102459.574999986, 'A'],
['n', 102469.35499995, 'B'],
[' ', 102580.80999995599, 'A'],
['t', 102588.555000024, 'B'],
['e', 102672.149999999, 'A'],
['e', 102753.13999992801, 'B'],
[' ', 102774.405000033, 'B'],
['x', 102836.609999882, 'A'],
['x', 102962.774999905, 'B'],
['a', 102990.560000064, 'A'],
['a', 103132.16499984301, 'B'],
['α', 103372.664999915, 'A'],
['α', 103879.135000054, 'A'],
['α', 103911.880000029, 'A'],
['α', 103944.404999958, 'A'],
['α', 103977.625000058, 'A'],
['α', 104008.33999994199, 'A'],
['α', 104018.140000058, 'B'],
['α', 104279.709999915, 'A'],
['α', 104418.629999971, 'B'],
['t', 104550.4699999, 'A'],
['t', 104640.194999985, 'B'],
['a', 104689.35999996, 'A'],
['n', 104830.58999991, 'A'],
['z', 104930.58999991, 'A'],
['a', 104846.105000004, 'B'],
['n', 104946.105000004, 'B']], dtype=object)
Теперь у меня есть около 2000 таких массивов и каждыйв среднем около 300-400 рядов. Таким образом, здесь нет большой необходимости в производительности.
Возвращаясь к нашему списку MWE, нас интересует только порядок массива с использованием первого столбца :
array(['i', 'm', 'i', 'o', 'p', 'm', 'o', 'p', 'o', 'r', 'r', 'a', 'n', 'a',
't', 'n', ' ', 't', 'e', 'e', ' ', 'x', 'x', 'a', 'a', 'α', 'α',
'α', 'α', 'α', 'α', 'α', 'α', 'α', 't', 't', 'a', 'n', 'a', 'n'],
dtype=object)
Но есть еще одна оговорка: средний столбец (числовой) является отметкой времени и, следовательно, должен монотонно увеличиваться, чтобы конечный результат имел смысл.
Желаемый результат
Теперь, то, как элементы в списке должны быть структурированными, - это последовательные пары (но по причинам, связанным с сбором данных, это не так). Итак, вот отсортированный столбец, к которому мы стремимся:
array(['i', 'i', 'm', 'm', 'p', 'p', 'o', 'o', 'r', 'r', 'a', 'a', 'n',
'n', 't', 't', ' ', ' ', 'e', 'e', 'x', 'x', 'a', 'a', 'α', 'α',
'α', 'α', 'α', 'α', 'α', 'α', 'α', 't', 't', 'a', 'a', 'n', 'n'],
dtype=object)
, где последний столбец выглядит так:
array(['A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A',
'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'A',
'A', 'A', 'A', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B'],
dtype=object)
Дополнительные предостережения
- ТеперьЯстребиный читатель заметит, что я пропустил две строки в исходном массиве. Это также из-за ошибок сбора данных. Чтобы пара была «действительной» и, следовательно, была включена в окончательный отсортированный массив, в последнем столбце должно быть значение
'A'
и 'B'
. Так что в конечном выводе отсутствует четвертая строка сверху и третья снизу, потому что они не соответствуют условию. - Но иногда мы также получаем последовательности символов, которые имеют только «А»но в конечном итоге получить совпадающую букву «B», такую как последовательности
'α','α','α','α','α','α','α'
- такие последовательности действительны, потому что даже если они не являются парой, они принадлежат к одной группе из-за индикатора «start» 'A'
и концаиндикатор 'B'
этого символа. Но если для символа нет подходящего индикатора конца или начала, его нужно удалить из окончательного списка. - Сбор данных несколько случайный, поэтому вещи выглядят не по порядку.
Я ищу помощь в методе, который может сортировать строки массивов, подобных этому, в требуемый последовательный порядок пары. Заранее спасибо, пожалуйста, дайте мне знать, если не ясно, что я ищу, и я добавлю больше описания.