如何从堆叠中取出我的数据

时间:2019-01-28 18:24:06

标签: python pandas

我的用于计算欧式距离的代码。 首先,我读取了一个文件,其中有一系列系统发育距离度量,并根据这些度量来计算欧几里德距离。 我的问题是此刻将文件保存到输出中。 我构造for循环的方式使我可以堆叠数据,但是,我希望将数据堆叠。 请在下面查看我的输出和所需输出的详细信息。

# -*- coding: utf-8 -*-
import os
import sys
import pandas as pd
import numpy as np
from scipy.spatial.distance import squareform, pdist
import scipy
pd.options.mode.chained_assignment = None  # default='warn'
from itertools import combinations
from collections import Counter
import pickle
f = open(sys.argv[1], 'r')
w = open(sys.argv[2], 'w')

freader=pd.read_csv(f,sep='\t')
vector2=['kU.','kUn.','kL.']#,'kLn.','Sim.','Trip.','RF.','KC.','KCw.']                                                                 
vector1=['kU','kUn','kL']#,'kLn','Sim','Trip','RF','KC','KCw']


comb1=sum([map(list, combinations(vector1, i)) for i in range(len(vector1) + 1)], [])

for i in comb1:
    if i!=[]:
        new_f1 = freader[i]
        j = [word.replace(word, word + '.') for word in i]
        new_f2 = freader[j]
        ary = scipy.spatial.distance.cdist(new_f1, new_f2)
        v=np.diag(ary)
        v = v.tolist()
        distances=''.join(i)
        euclidean='\n'.join(map(str,v))
        w.write(distances + '\n' + euclidean + '\n')
        #print w

f.close()

给我堆积的输出文件,例如:

kU
0.1196105158
0.2359754815
kUn
0.5221363287
0.0006352575
kL
0.0986327691
0.2722213035
kUkUn
0.5356612934
0.2359763366
kUkL
0.1550325728
0.3602622183
kUnkL
0.5313706511
0.2722220447
kUkUnkL
0.5446663606
0.3602627784

但是我想要这个未堆叠的输出文件:

kU              kUn             kL              kUkUn           kUkL            kUnkL           kUkUnkL
0.1196105158    0.5221363287    0.0986327691    0.5356612934    0.1550325728    0.5313706511    0.5446663606
0.2359754815    0.0006352575    0.2722213035    0.2359763366    0.3602622183    0.2722220447    0.3602627784

1 个答案:

答案 0 :(得分:2)

您可以重塑基础数组

pd.DataFrame(df.values.reshape(len(df)//3, 3)).set_index(0).T

    kU              kUn             kL              kUkUn           kUkL            kUnkL   kUkUnkL
1   0.1196105158    0.5221363287    0.0986327691    0.5356612934    0.1550325728    0.5313706511    0.5446663606
2   0.2359754815    0.0006352575    0.2722213035    0.2359763366    0.3602622183    0.2722220447    0.3602627784