有没有办法按最后一个元素对数组的行进行排序,在本例中是单元格 ID。小区 ID 构建如下:“CellID_NumberOfCell
arr =np.array([['65.0','30.0','20.0','0.0','0_0'],
['2.0','29.0','24.0','0.0','1_0'],
['0.0','18.0','4.0','0.0','2_0'],
['16.0','9.0','0.0','9990.0','7_203'],
['16.0','9.0','0.0','9990.0','0_203'],
['20.0','23.0','31.0','9990.0','8_158'],
['65.0','30.0','20.0','0.0','0_10']])
排序后应该是这样的:
arr =np.array([['65.0','30.0','20.0','0.0','0_0'],
['65.0','30.0','20.0','0.0','0_10'],
['16.0','9.0','0.0','9990.0','0_203'],
['2.0','29.0','24.0','0.0','1_0'],
['0.0','18.0','4.0','0.0','2_0'],
['16.0','9.0','0.0','9990.0','7_203'],
['20.0','23.0','31.0','9990.0','8_158']])
编辑:
排序后是否也可以删除下划线后面的数字?。所以我只有身份证。而不是 0_0 只是 0。
EDIT2
ID排序后,还要按时间排序,比如每个ID为0的也应该按时间0,1...9999等排序
请您参考如下方法:
np.argsort(arr[:, -1]) 将为您提供排列,以便对 arr 最后一列的元素进行排序。
然后,arr[np.argsort(arr[:, -1])] 根据此排列对 arr 的行重新排序。
请注意,由于您的数据由字符串组成,因此使用了字典顺序,因此 0_10 出现在 0_2 之前。如果这不是您想要的,您应该拆分最后一列,我建议您使用 pandas.DataFrame:
import pandas as pd
df = pd.DataFrame(arr)
df['Cell'], df['CellIndex'] = df[df.columns[-1]].str.split('_', 1).str
df['Cell'] = df['Cell'].astype(int)
df['CellIndex'] = df['CellIndex'].astype(int)
df.sort_values(['Cell', 'CellIndex'])
pandas 是处理此类数据的真正方式。
