2017-06-19 101 views
2

我有一個包含多列的tsv文件。有10列以上的列,但對我來說重要的列是名稱爲user_name,shift_id,url_id的列。我想創建一個數據框架,它首先根據user_names分隔整個csv文件,即只有具有相同user_name的行才被分組在一起。從該塊創建另一個塊,其中只有具有某個shift_id的行被組合在一起,然後從該塊創建具有相同url的塊。不幸的是,由於公司的規則,不能共享數據,並且使虛構的數據表可能更令人困惑。將csv文件分割成多列的熊貓數據幀

其他兩列有時間戳。我想計算塊的持續時間,但只有在根據這些列對塊進行分組後才能計算。

我已經看到了按特定列值拆分數據框的答案,但在我的情況下,我有三個列值,而且它們的分隔順序也很重要。

謝謝你的幫助!

+0

您的意思是「dataframe」只選擇3個重要的列嗎? – 0p3n5ourcE

+1

如何向我們展示一些數據,代碼或任何其他內容。 –

+0

@開放源代碼我的編輯幫助? –

回答

1

假設你閱讀列dataframe

df = pd.DataFrame({'col1':[1,2,3], 'col2':[4,5,6],'col3':[7,8,9], 
       'col4':[1,2,3],'col5':[1,2,3],'col6':[1,2,3], 
       'col7':[1,2,3],'col8':[1,2,3],'col9':[1,2,3], 
       'col91':[1,2,3]}) 
print(df) 

輸出:

 col1 col2 col3 col4 col5 col6 col7 col8 col9 col91 
0  1  4  7  1  1  1  1  1  1  1 
1  2  5  8  2  2  2  2  2  2  2 
2  3  6  9  3  3  3  3  3  3  3 

現在,我們只能選擇三個利益列,讓它成爲col1, col2, and col3

tmp_df = df[['col1', 'col2', 'col3']] 
print(tmp_df) 

輸出:

 col1 col2 col3 
0  1  4  7 
1  2  5  8 
2  3  6  9 

再者,我們要過濾基於三個列值:

final_df = tmp_df[(tmp_df.col1 == 1) & (tmp_df.col2 == 4) & (tmp_df.col3== 7)] 
print(final_df) 

輸出:

col1 col2 col3 
0  1  4  7 

閱讀dataframe後,所有這些上述步驟可以在單一的行中來達到的:

final = df[['col1', 'col2', 'col3']][(df.col1 == 1) & (df.col2 == 4) & (df.col3== 7)] 
final 

希望它有幫助!

更新:

df = pd.DataFrame({'col1':[1,1,1,1,1], 'col2':[4,4,4,4,7],'col3':[7,7,9,7,7], 
       'col4':['X','X','X','X','X'],'col5':['X','X','X','X','X'],'col6':['X','X','X','X','X'], 
       'col7':['X','X','X','X','X'],'col8':['X','X','X','X','X'],'col9':['X','X','X','X','X'], 
       'col91':['X','X','X','X','X']}) 
print(df) 

輸出:

 col1 col2 col3 col4 col5 col6 col7 col8 col9 col91 
0  1  4  7 X X X X X X  X 
1  1  4  7 X X X X X X  X 
2  1  4  9 X X X X X X  X 
3  1  4  7 X X X X X X  X 
4  1  7  7 X X X X X X  X 

現在,usinig如上類似掩蔽:

final = df[(df.col1 == 1) & (df.col2 == 4) & (df.col3== 7)] 
final 

輸出:

col1 col2 col3 col4 col5 col6 col7 col8 col9 col91 
0  1  4  7 X X X X X X  X 
1  1  4  7 X X X X X X  X 
3  1  4  7 X X X X X X  X 
+0

這太好了。但是,假設col1中有更多的行,col1中有1行,col2中有更多不同的行,4中有更多,7中有更多。由於順序很重要,我首先需要col1中有1的所有行。然後從這些行中,我想要col2中有4個的所有行,然後從這些行中我想要col3中有7個的行。最後,我將有col1中的1,col2中的4,col3中的7以及其他具有不同值的cols。我需要在其他列上操作。我希望這有助於。非常感謝你的時間和耐心。我欠你很多時間! –

+0

@BinamrataSharma我添加了更新的部分,不知道這是不是你的意思。我仍然不知道爲什麼要排序,因爲我們正在尋找三列交叉點。 – 0p3n5ourcE

+1

這很好。我會嘗試從這裏開始。但不是說col1 == 1,而是想要一些類似於此列中每個唯一值的泛型,因爲它不可能手動跟蹤所有列中的唯一值。但這是一個很好的開始。 –