我是Python新手,对我来说这似乎有点棘手:
我有3列:
column1 : id
column2 : size
column3 : rank
我现在想要重新对齐id列并保持大小,按顺序排列(大小,等级)
所以它看起来像:
id:1 (size,rank):4,5
id:2 (size,rank):5,8
所以id列必须从1到1000重新排列,而不是弄乱(大小,等级)tupel
我试着这样做:
combined = zip(size,rank)
id, combined = zip(*sorted(zip(id, combined)))
这是对的吗?如果是的话,我怎样才能将tupel分成两个阵列大小并再次排名。
我听说过zip(*combined)
?
unziped = zip(*合并)
然后size equals unziped[0] and rank equals unziped[1]
?
谢谢你的帮助!
从Numpy genfromtxt function
size= [x[2] for x in mydata]
rank= [x[1] for x in mydata]
答案 0 :(得分:2)
您的主要问题是您使用id
列作为标识符和订购数据的值。这是错的。保留id列;然后按大小排序数据;一旦您对其进行了排序,请使用enumerate
列出“订单”。
这是一个例子,它按第二列(大小)对数据进行排序,然后打印数据及其“等级”或“顺序”:
>>> data = ((1, 4, 5), (3, 6, 7), (4, 3, 3), (19, 32, 0))
>>> data_sorted = sorted(data, key=lambda x: x[1])
>>> for k,v in enumerate(data_sorted):
... print('{}: {}'.format(k+1, v))
...
1: (4, 3, 3)
2: (1, 4, 5)
3: (3, 6, 7)
4: (19, 32, 0)