org = [['A', 'a', 1],
       ['A', 'b', 2],
       ['A', 'c', 3],
       ['B', 'a', 4],
       ['B', 'b', 5],
       ['B', 'c', 6],
       ['C', 'a', 7],
       ['C', 'b', 8],
       ['C', 'c', 9]]

我想把“组织”改成下面这样的标准矩阵形式。
transform = [['\t','A', 'B', 'C'],
             ['a', 1, 4, 7],
             ['b', 2, 5, 8],
             ['c', 3, 6, 9]]

我做了一个小函数来转换这个。
我写的代码如下:
import numpy as np

def matrix(li):
    column = ['\t']
    row = []
    result = []
    rest = []
    for i in li:
        if i[0] not in column:
            column.append(i[0])

        if i[1] not in row:
            row.append(i[1])


    result.append(column)

    for i in li:
        for r in row:
            if r == i[1]:
                rest.append([i[2]])
    rest = np.array(rest).reshape((len(row),len(column)-1)).tolist()

    for i in range(len(rest)):
        rest[i] = [row[i]]+rest[i]

    result += rest

    for i in result:
        print(i)

matrix(org)

结果是:
>>>['\t', 'school', 'kids', 'really']
[72, 0.008962252017017516, 0.04770759762717251, 0.08993156334317577]
[224, 0.004180594204995023, 0.04450803342634945, 0.04195010047081213]
[385, 0.0021807662921382335, 0.023217182598008267, 0.06564858527712682]

我不认为这是有效的,因为我使用了太多的for循环。
有什么有效的方法可以做到这一点吗?

最佳答案

因为您使用的是第三方库,所以这是一项非常适合pandas的任务。
根据您的需求合并索引和列的工作有些混乱,但效率不高。

org = [['A', 'a', 1],
       ['A', 'b', 2],
       ['A', 'c', 3],
       ['B', 'a', 4],
       ['B', 'b', 5],
       ['B', 'c', 6],
       ['C', 'a', 7],
       ['C', 'b', 8],
       ['C', 'c', 9]]

df = pd.DataFrame(org)

pvt = df.pivot_table(index=0, columns=1, values=2)

cols = ['\t'] + pvt.columns.tolist()

res = pvt.values.T.tolist()
res.insert(0, pvt.index.tolist())
res = [[i]+j for i, j in zip(cols, res)]

print(res)

[['\t', 'A', 'B', 'C'],
 ['a', 1, 4, 7],
 ['b', 2, 5, 8],
 ['c', 3, 6, 9]]

10-06 14:55