按列1和元组(column2,column3)排序,然后再次展开

时间:2014-06-08 11:54:47

标签: python python-2.7

我是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]

1 个答案:

答案 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)