python - 将二维列表更改为标准矩阵形式

标签 python arrays python-3.x numpy matrix

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

我想将“org”更改为如下所示的标准矩阵形式。

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 循环。 有什么有效的方法可以做到这一点吗?

最佳答案

由于您使用的是第 3 方库,因此这是一项非常适合 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]]

关于python - 将二维列表更改为标准矩阵形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50256984/

相关文章:

python - python 中“模块”对象没有属性 'date_range'

javascript - 从数组数组中挑选一个唯一的集合

javascript - 当我在分派(dispatch)后更新 vue 组件中的状态时,防止状态更新

python - Numpy:创建 block 矩阵的函数

python - 如何在 mongodb 中使用聚合?

python - cx_freeze 在带有视网膜显示屏的 MacBook Pro 上生成模糊 GUI

python - 用计算值替换 matplotlib 刻度标签的正确方法是什么?

mysql - MySQL 中的变长数组

python - 如何在 python 3 中将二进制值转换为文本或 ascii?

python - 为 opencv python 包安装 gstreamer 支持