Transposer et copyr datatables de la colonne à chaque rangée

J'ai des données mises en place dans la structure suivante

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 

Et j'aimerais prendre des champs x de chaque rangée dans la colonne E de sorte que l'effet suivant puisse se produire

  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 

Je viens d'utiliser le etc., car j'imaginerais que l'idée de ce que j'essaie de faire serait mise en place.

Transposer des données essentiellement me permet de prendre une partie de la colonne et de la transformer en une ligne, mais je ne veux pas supprimer datatables après la transposition, je veux simplement copyr ces zones, mais j'ai une grande feuille de calcul (1500 lignes actuellement et en croissance)

Bien que j'utilise une feuille de calcul, c'est simplement un CSV et je suis à l'aise en utilisant différentes langues de script ou des langages de programmation si nécessaire, j'ai considéré C ++, python, javascript, etc., mais je ne sais pas ce qu'est le simplist manière d'atteindre cet objective.

Cela devrait faire essentiellement ce que vous requestz. Tout d'abord, des données fictives:

 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) masortingx = [[c + str(i) for c in char_range('a', 'e')] for i in range(1, 5)] 

Cela nous donne:

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

Maintenant, certaines variables pour rendre l'expression plus facile à lire:

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

Maintenant, la magie. J'ai supposé que, si nous arrivions à la fin de la dernière ligne, nous mettions juste less de valeurs. Cela ne devrait s'appliquer que pour vos dernières x lignes.

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

résultant en:

 [['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']] 

Notez l'utilisation de min ici car nous ne voulons pas sortir des limites de la masortingce, et nous ne soaps pas si c'est une masortingce carrée, etc. Autrement dit, l'expression dit "build une nouvelle rangée contenant la ième rangée à partir de la masortingce d'origine, et append sur le dernier élément de chacune des lignes de min(i+1, last) à min(i+1+grab, last) "