如何在 Python 中将列值转置为行值

How to Transpose Column Values to Row Values in Python

我想在 R 中进行市场购物篮分析,需要在此之前转换我的 Python 数据。

当前数据:

[[Value1, Value2, Value3,...],
[Value3, Value4, Value5,...],
[Value4, Value2, Value1,...]]

预期输出

User1 Value1
User1 Value2
User1 Value3
User2 Value3
User2 Value4
User2 Value5
User3 Value4
User3 Value2
User3 Value1

您可以使用numpy.transpose转置矩形数组。

numpy.transpose([[ 0,1],[2,3]]) 
array([[0, 2],
       [1, 3]])

结果是 numpy.ndarray,但您可以使用 .tolist() 转换回列表。

这不是转置函数的超快速使用,对于较大的项目,您可能应该写一些更好的东西,但如果您只是想在教程中寻找一些简单的东西,那么它应该没问题。

a = [['Value1', 'Value2', 'Value3'],['Value3', 'Value4', 'Value5'],['Value4', 'Value2', 'Value1']]

for i,each in enumerate(a):
    for elem in each:
        print "user%s" %(i+1),elem

值列表(嵌套列表,不是真正的行和列)

In [264]: ll=[[1,2,3],[3,4,5],[4,2,1]]

用户名列表 - ll 中每一项一个值:

In [265]: ul=['user1','user2','user3']

合并了 ulll

的值的扁平化输出
In [266]: print('\n'.join(['%s %s'%(i,x) for i,j in zip(ul,ll) for x in j]))
user1 1
user1 2
user1 3
user2 3
user2 4
user2 5
user3 4
user3 2
user3 1

显然这可以转换为带有行打印的嵌套 for。或者保留为字符串列表或元组列表(或子列表):

In [268]: ['%s %s'%(i,x) for i,j in zip(ul,ll) for x in j]
Out[268]: 
['user1 1',
 'user1 2',
 'user1 3',
 'user2 3',
 'user2 4',
 'user2 5',
 'user3 4',
 'user3 2',
 'user3 1']
In [269]: [(i,x) for i,j in zip(ul,ll) for x in j]
Out[269]: 
[('user1', 1),
 ('user1', 2),
 ('user1', 3),
 ('user2', 3),
 ('user2', 4),
 ('user2', 5),
 ('user3', 4),
 ('user3', 2),
 ('user3', 1)]

In [272]: list(zip(ul,ll))
Out[272]: [('user1', [1, 2, 3]), ('user2', [3, 4, 5]), ('user3', [4, 2, 1])]

zip(list1,list2) 是在列表甚至 'transposing' 列表中配对项目的便捷方式。 'Transpose' 在此上下文中纯粹是一个类比,因为列表和列表对实际上没有列和行。