转置并将列数据复制到每一行

我有以下结构设置数据

A ,B ,C ,D ,E 1 a1,b1,c1,d1,e1 2 a2,b2,c2,d2,e2 3 a3,b3,c3,d3,e3 4 a4,b4,c4,d4,e4 

我想从列E下的每一行中取出x个字段,以便可以发生下列情况

  A ,B ,C ,D ,E 1 a1,b1,c1,d1,e1,e2,e3 2 a2,b2,c2,d2,e2,e3,e4 3 a3,b3,c3,d3,e3,e4,etc 4 a4,b4,c4,d4,e4,etc,etc 

我只是用等等,因为我想象我想要做的事情的想法将被通过。

本质上来说,转置数据只允许我把某一列的区域变成一行,但是我不想在转置后删除数据,我只是想复制那些区域,但是我有一个大的电子表格(1500行目前正在增长)

虽然我使用的是电子表格,但这只是一个CSV,我很喜欢使用各种脚本语言或者编程语言(如果需要的话),我已经考虑了C ++,python,javascript等,但是我不确定什么是simplist实现这一目标的途径。

这应该基本上是你所问的。 首先是一些虚拟数据:

 def char_range(c1, c2): """Generates the characters from `c1` to `c2`, inclusive.""" for c in xrange(ord(c1), ord(c2)+1): yield chr(c) matrix = [[c + str(i) for c in char_range('a', 'e')] for i in range(1, 5)] 

这给了我们:

 [['a1', 'b1', 'c1', 'd1', 'e1'], ['a2', 'b2', 'c2', 'd2', 'e2'], ['a3', 'b3', 'c3', 'd3', 'e3'], ['a4', 'b4', 'c4', 'd4', 'e4']] 

现在有些variables使expression式更易读:

 # How many values you want to grab for each row x = 3 # Length of the last column in the matrix last = len(matrix) 

现在是魔法。 我做了一个假设,如果我们已经到了最后一行的末尾,我们只需要减less一些值。 这应该只适用于你的最后x行。

 [mr + [row[-1] for row in matrix[min(i+1, last):min(i+1+grab, last)]] for (i, mr) in enumerate(matrix)] 

导致:

 [['a1', 'a2', 'a3', 'a4', 'b4', 'c4', 'd4'], ['b1', 'b2', 'b3', 'b4', 'c4', 'd4', 'e4'], ['c1', 'c2', 'c3', 'c4', 'd4', 'e4'], ['d1', 'd2', 'd3', 'd4', 'e4'], ['e1', 'e2', 'e3', 'e4']] 

注意在这里使用min ,因为我们不想超出matrix的界限,我们不知道它是否是一个方阵。除此之外,expression式说“构造一个包含第i行的新行从原来的matrix,并添加从min(i+1, last)min(i+1+grab, last)的每一行的最后一个元素“