把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
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)
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> 可能我的思路不是最优,希望不要介意:
思路:将字符 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()} 便可 数据转置不是这样问的,况且你都说了数据量较大,而且字符也不是简单的a,b,c,d,e。
我给你一个简单的方法,excel的数据透视表。 试试这样
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 提示:
1. dfp = df.pivot(...);dfp=dfp.fillna(0)
2. dft = dfp.T
3. res = pd.concat()
4. 过滤+合并
页:
[1]