2017-07-26 73 views
0

我正在尝试重新组织一个.txt文件,其中包含列中的特性以及行中的系列的数据列表。基本上,我需要编写一个程序,创建比较每个家庭中的人员的行,以便比较人物1和2,1和3以及2和3。即:重新排列数据文件

A 1 2 7 8 9 10 
A 1 3 7 9 9 11 
etc. 

其中A是家庭,前2个数字的人相比,第三和第四个数字是trait1如测量每个人,和最终的数字trait2如BMI值为每个人。

我的输入是这样的:

A 1 trait trait 
A 2 trait trait 
A 3 trait trait 

我能够使用创建一个数据帧:

data = pandas.read_csv('family.txt.', sep=" ", header = None) 
print(data) 

我似乎无法找出一个有效的方法来连接数据到行需要以上。任何帮助是极大的赞赏! 谢谢

+0

_where A被家庭,前2号的人相比,第三和第四数字trait1如测量每个人,最终的数字是特质2,例如每个人的BMI值。你可以详细说明这是什么意思吗?所以第三价值属于第一人,第四价属于第二人?或者他们有些差异? –

+0

@SrinivasSuresh Definetely!对不起,这有点令人困惑!所以我试图将家庭中的每个亲属及其特征与他们每个亲属的特征进行比较。因此,在所需的输出,列开始与两个7的和正在特质,每个特质有两个号码(每个人) –

+0

@ H.Minear什么?要求具体产出的具体投入是否太麻烦了?只是使用'特征'*根本没有帮助*。 –

回答

1

好,考虑您的数据如下

A 1 7 4 5 6 
A 2 6 5 4 7 
A 3 7 7 5 4 
B 1 7 4 5 6 
B 2 6 5 4 7 
B 3 7 7 5 4 

其中第一列是家庭,第二列是为person_id和所有后续列的特征。

一些超级脏和超级草草编写的代码下面似乎给你你想要

file_lines = [] 
out_list = [] 
final_out = [] 

def read_file(): 
    global file_lines 
    with open("sample.txt", 'r') as fd: 
     file_lines = fd.read().splitlines() 
    print file_lines 

def make_output(): 
    global file_lines, out_list, final_out 
    out_line = [] 
    for line1 in file_lines: 
     for line2 in file_lines: 
      line1c = line1.split(" ") 
      line2c = line2.split(" ") 
      if line1c[0] == line2c[0]: 
       if line1c[1] >= line2c[1]: 
        continue 
       else: 
        out_list = [] 
        out_list.append(line1c[0]) 
        out_list.append(line1c[1]) 
        out_list.append(line2c[1]) 
        for i in range(2, len(line1c)): 
         out_list.append(line1c[i]) 
         out_list.append(line2c[i]) 
       print " ".join(out_list) 

read_file() 
make_output() 

什么打印的输出是

A 1 2 7 6 4 5 5 4 6 7 
A 1 3 7 7 4 7 5 5 6 4 
A 2 1 6 7 5 4 4 5 7 6 
A 2 3 6 7 5 7 4 5 7 4 
A 3 1 7 7 7 4 5 5 4 6 
A 3 2 7 6 7 5 5 4 4 7 
B 1 2 7 6 4 5 5 4 6 7 
B 1 3 7 7 4 7 5 5 6 4 
B 2 1 6 7 5 4 4 5 7 6 
B 2 3 6 7 5 7 4 5 7 4 
B 3 1 7 7 7 4 5 5 4 6 
B 3 2 7 6 7 5 5 4 4 7 

正如你可以看到在家庭的人1相比与2和3. 2与1和3进行比较,3与1和2进行比较。

显然会有重复,因为每个人都会与其他人进行比较他的家人两次。

通过维护与谁进行比较的列表来清除此问题是微不足道的。

P.S:我知道脚本真的很脏,但我只是想说明我做了什么。不写产品代码

编辑:我想写一个稍微复杂的重复卸妆。但是由于数据非常简单,继续标准的一个小修改解决了它。此编辑后的输出是

A 1 2 7 6 4 5 5 4 6 7 
A 1 3 7 7 4 7 5 5 6 4 
A 2 3 6 7 5 7 4 5 7 4 
B 1 2 7 6 4 5 5 4 6 7 
B 1 3 7 7 4 7 5 5 6 4 
B 2 3 6 7 5 7 4 5 7 4 

其不含重复的

+0

再次感谢您!不用担心,我也可以编辑它:)所以要删除重复的内容,你会推荐什么功能? –

+0

嗯,我意识到,鉴于您的情况去除重复比维护一个列表更容易一点,所以我已经编辑我的代码要做到这一点 –

+0

我想同样的事情!谢谢你为我做的一切!祝你今天愉快! –