2017-07-26 82 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

我想同樣的事情!謝謝你爲我做的一切!祝你今天愉快! –