Thanere 发表于 2022-3-8 21:25:04

把3列数据转换成矩阵

我的txt文件有3列

T1        T2        T3
a        b        1
a        c        2
a        d        3
a        e        4
b        c        5
b        d        6
b        e        7
c        d        8
c        e        9
d        e        10

想把它转换成
        a        b        c        d        e
a        0        1        2        3        4
b        1        0        5        6        7
c        2        5        0        8        9
d        3        6        8        0        10
e        4        7        9        10        0

由于数据量较大,有没有大神能用脚本实现
非常感谢
(对称矩阵较难实现的话,下面这种也可以,感谢)
        a        b        c        d        e
a        0        1        2        3        4
b                0        5        6        7
c                        0        8        9
d                                0        10
e                                        0

wp231957 发表于 2022-3-9 09:58:46

t=[["a","b",1],["a","c",2],["a","d",3],["a","e", 4],["b","c", 5],["b","d",6],["b","e",7],["c","d", 8],["c","e",9],["d","e",10]]
s=[
    ["","a","b","c","d","e"],
    ["a",0,0,0,0,0],
    ["b",0,0,0,0,0],
    ["c",0,0,0,0,0],
    ["d",0,0,0,0,0],
    ["e",0,0,0,0,0]
]
for x in range(1,6) :
    for y in range(1,6):
      for z in t:
            if z==s and z==s:
                s=s=z
   
for x in s:
    print(x)      

wp231957 发表于 2022-3-9 09:59:18

PS D:\wp> & C:/Programs/Python/python.exe d:/wp/tx7.py
['', 'a', 'b', 'c', 'd', 'e']
['a', 0, 1, 2, 3, 4]
['b', 1, 0, 5, 6, 7]
['c', 2, 5, 0, 8, 9]
['d', 3, 6, 8, 0, 10]
['e', 4, 7, 9, 10, 0]
PS D:\wp>

傻眼貓咪 发表于 2022-3-9 10:31:34

可能我的思路不是最优,希望不要介意:

思路:将字符 a, b, c .... 一一对应位置 0, 1, 2, ....
比如:dic = {'a': 0, 'b': 1, 'c': 2, ......以此类推}

矩阵:视 matrix 如 matrix(代码写成:matrix]] 便可)

假设字符很多,有 a 到 z 甚至更多,不可能一个一个慢慢写,转换思路,ord('a') 是 97,ord('z') 是 122

那么:dic = {key: value for value, key in enumerate()} 便可

elven08 发表于 2022-3-9 13:20:55

数据转置不是这样问的,况且你都说了数据量较大,而且字符也不是简单的a,b,c,d,e。
我给你一个简单的方法,excel的数据透视表。

elven08 发表于 2022-3-9 17:40:17

试试这样
t,c,d=[],[],[]

with open(r"test.txt",'r') as f:
    datas = f.readlines()
    for data in datas:
      data1 = data.split('      ')
      if data1 == ['\n']:
            continue
      newdata =
      c.append(newdata)    #收集第一列变量
      d.append(newdata)    #收集第二列变量
      t.append(newdata)
      
ls = c + d   #整和变量

cd = ['title'] + sorted(set(ls),key = ls.index)   #变量去重排序

array = [*len(cd) for i in range(len(cd))]

for i in range(1,len(cd)+1):
    array=cd
    array=cd

for x in range(len(array)) :
    for y in range(len(array)):
      for z in t:
            if z==array and z==array:
                array=array=z

阿奇_o 发表于 2022-3-9 19:28:03

提示:
1. dfp = df.pivot(...);dfp=dfp.fillna(0)   
2. dft = dfp.T
3. res = pd.concat()
4. 过滤+合并
页: [1]
查看完整版本: 把3列数据转换成矩阵