可以说我将有两个阵列。第一行将指定时间戳,第二行将是资料。
timeStamp = ['0001','0002','0003',...,'9999']
data = [6234,2372,1251,...,5172]
存盘它们的最佳方式是什么?假设我想将资料从最小到更大的数字进行排序,同时保持它们的时间戳值附加到它们上面?
uj5u.com热心网友回复:
有多种方法可以做到这一点。让我们获取以下资料 -
timeStamp = [9,1,2,3,9999]
data = [1245, 6234,2372,1251,5172]
使用基础 python 和 zip
处理资料的默认方式,特别是串列。zip
方法允许您按元素压缩两个或多个串列,创建一个元组串列。然后sorted
,您可以使用lamda 函式,该函式按元素的特定位置对组合串列进行排序。
l = zip(timeStamp, data) #storing 2 arrays by attaching them elementwise
print(sorted(l, key=lambda x: x[0]))
[(1, 6234), (2, 2372), (3, 1251), (9, 1245), (9999, 5172)]
使用 numpy 和 argsort
Numpy 允许您使用多维阵列。对于 2 个串列,您可以简单地将np.stack
它们一起创建一个 2D 阵列。
为了排序,您可以argsort()
在第一列(时间戳)上使用,它回传已排序的有序列的索引。然后,您可以使用这些索引来索引原始二维阵列,以按时间戳获取阵列的排序顺序。
arr = np.stack([timeStamp, data])
arr[:,arr[0].argsort()]
array([[ 1, 2, 3, 9, 9999],
[6234, 2372, 1251, 1245, 5172]])
使用 pandas datafames 和 sort_values
最后,同时处理多个串列的最佳方法是将它们视为 DataFrame 中的列。Pandas 提供了一个方便的框架来处理列/行排列的资料,在这种情况下非常有用,因为您还可以使用列名来标识每个阵列/列。
将sort_values
让你快速排序基于列名的完整资料。
import pandas as pd
df = pd.DataFrame(zip(timeStamp, data), columns=['timeStamp','data'])
print(df.sort_values('timeStamp'))
timeStamp data
1 1 6234
2 2 2372
3 3 1251
0 9 1245
4 9999 5172
uj5u.com热心网友回复:
您可以使用二维阵列。您可以使用
timestamp_data = [ [timeStamp[i], data[i]] for i in range(len(timeStamp)) ]
现在,您可以使用
sorted_timestamp_data = sorted(timestamp_data, key=lambda row: row[1])
uj5u.com热心网友回复:
字典对你来说非常有用。您可以zip
data
然后timeStamp
排序,data
然后将元组转换为dict
(字典保留插入顺序)。然后您将拥有资料-时间戳对,其中资料是键,时间戳是值。
out = dict(sorted(zip(data, timeStamp)))
输出:
{1251: '0003', 2372: '0002', 5172: '9999', 6234: '0001'}
如果您想要 2 个单独的串列,则可以执行以下操作。不要强制转换为 dict 建构式,而是解压到串列:
data[:], timeStamp[:] = zip(*sorted(zip(data,timeStamp)))
输出:
[1251, 2372, 5172, 6234], ['0003', '0002', '9999', '0001']
uj5u.com热心网友回复:
取决于你想如何使用它。如果您不想使用其他库,我会使用类似的东西
result = sorted(({"timestamp": ts, "data": data} for ts, data in zip(timeStamp, data)), key=lambda d:d["data"]
这基本上是按资料排序的字典串列。我会选择字典串列,因为它比元组串列更具表现力。
uj5u.com热心网友回复:
要按照您描述的方式组织资料,您可以简单地执行以下操作:
sorted(zip(timeStamp, data), key=lambda x: x[1])
或者
from operator import itemgetter
sorted(zip(timeStamp, data), key=itemgetter(1))
要存盘这个物件,你可以pickle
,这里有一个很好的描述。显然,有很多选项可以存盘它。
uj5u.com热心网友回复:
嗯,这很简单
records = list(zip(data, timeStamp))
排序:
records.sort()
在 Python 中,元组是从左到右逐元素比较的,因此在这种情况下不需要提供 key 函式。而已。正如在一些评论中那样,没有必要让它过于复杂。
0 评论