我的数据包含在pandas数据框中(在列中)。为了解决这个问题,假设它看起来像这样(在这里我们使用数据帧小视图的numpy版本):
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'
值
最后一列。因此,最终输出中缺少的是从顶部开始的第四行和从底部开始的第三行,因为它们不满足条件。'α','α','α','α','α','α','α'
的序列-这样的序列是有效的,因为即使它们不是一对由于此符号的“开始”指示符'A'
和结束指示符'B'
,它们属于同一组。但是,如果没有符号的匹配结束或开始指示符,则必须将其从最终列表中删除。我正在寻找一种方法的帮助,该方法可以将像这样的数组行按所需的对顺序顺序进行排序。在此先感谢您,如果不清楚我要寻找的内容,请告诉我,我将添加更多说明。