将列数据转置并复制到每一行
Transpose and copy column data to each row
我在下面的结构中设置了数据
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
我只使用了etc,因为我可以想象我要做的事情会被传递出去。
基本上转置数据只允许我取列的一个区域并将其转换为行,但我不想在转置后删除数据,我只是想复制这些区域,但我有一个大的电子表格(目前1500行,并不断增长)
虽然我使用的是电子表格,这只是一个CSV,如果需要的话,我可以使用各种脚本语言或编程语言,我考虑过c++,python,javascript等,但我不确定什么是实现这一目标的最简单的方法。
这应该基本上做你所要求的。首先是一些虚拟数据:
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']]
现在有一些变量使表达式更容易阅读:
# How many values you want to grab for each row
x = 3
# Length of the last column in the matrix
last = len(matrix)
现在是魔术。我做了一个假设,如果我们到达最后一行的末尾,我们就放更少的值。这应该只适用于最后的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
的使用因为我们不想超出矩阵的边界,我们不知道它是否是方阵等等。除此之外,表达式说"构造一个包含原始矩阵第i行的新行,并添加从min(i+1, last)
到min(i+1+grab, last)
的每一行的最后一个元素"
相关文章:
- 允许为显示的每个数据表选择一行
- 更改多个文本框并选择从一行检索到另一行的数据
- 如何在从服务器获取数据的动态表的每一行中添加下拉列表
- 数据表中的fnAddData()添加到同一行,而不是添加到新行
- 如何编辑和删除jQuery数据表的每一行
- 当鼠标悬停在一行上时,哪个plot.ly json属性可以显示所有悬停数据
- 将数据表的所有行(最后一行除外)的光标更改为指针
- 如何在数据表中复制一行(jQuery DataTables插件)
- 一次打开一行详细信息数据表
- 从数据表中选择一行以显示单选按钮值
- 如何使用 Angular.js 获取表的每一行数据
- 如何以编程方式告知要在数据表中编辑哪一行
- 数据表 - 针对“每一行”的行
- 如何从另一个网站上的文本文件的最后一行获取数据
- PHP MYSQLI无法从数据库中删除一行数据
- 如何在15天后自动删除数据库中的一行数据
- JQuery DataTables合并同一行数据
- 将前一行数据添加到动态生成的行
- 通过单选按钮选择一行时,将一行数据复制到同一页面的文本字段中
- 从数组中删除一行数据时遇到麻烦.PHP + Javascript