2017-07-31 51 views
3

我試圖與下數據幀匹配Sample_ID提取行:查找匹配行的值,並分別提取它們,而無需指定匹配值(鍵)

df1 = pd.DataFrame([[1, 1.0, 2.3,0.2,0.53], [2, 3.35, 2.0,0.2,0.65], [2,3.4, 
       2.0,0.25,0.55], [3,3.4,2.0,0.25,0.55]], 
       columns=["Sample_ID", "NaX", "NaU","OC","EC"])\ 
       .set_index('Sample_ID') 

在上述數據幀,DF1,我只想得到Sample_ID爲「2」的行。有沒有辦法做到這一點,而不指定匹配的值,關鍵?

我找的結果是:

 NaX NaU OC EC 
Sample_ID     
    2 3.35 2.0 0.20 0.65 
    2 3.40 2.0 0.25 0.55 

感謝您閱讀此!

+0

你試過嗎?這爲我提出了一個'KeyError'。 –

+0

同樣在這裏,關鍵錯誤 –

+0

我剛剛做了'df1.ix [2]',併爲我工作。 –

回答

5

使用.loc

df.loc[2] 

輸出:

  NaX NaU OC EC 
Sample_ID      
2   3.35 2.0 0.20 0.65 
2   3.40 2.0 0.25 0.55 

要回答評論問題,你可以創建一個字典和存儲組是這樣的:

list_of_df = {} 
for n,g in df1.groupby(level=0): 
    list_of_df[n] = g 
+0

而不是指定Sample_ID,有沒有辦法將它們自動提取到不同的DataFrame中作爲具有匹配Sample_ID的組?我問這個問題的原因是,如果數據量較大,我不會知道具有匹配值的Sample_ID數字。謝謝。 –

+0

list_of_df = {} for n,g in df1.groupby(level = 0): list_of_df [n] = g –

+0

此解決方案適用於我!有沒有辦法獲得數組大於1集的list_of_df值? –

5

布爾索引將做到這一點。 Sample_ID是索引,因此您需要使用df1.index上的條件。

In [34]: df1[df1.index == 2] 
Out[34]: 
      NaX NaU OC EC 
Sample_ID      
2   3.35 2.0 0.20 0.65 
2   3.40 2.0 0.25 0.55 

正如Scott波士頓提到,df.loc是另一個很好的選擇。

+0

謝謝! \t 而不是指定Sample_ID,有沒有辦法將它們自動提取到不同的DataFrame作爲具有匹配Sample_ID的組?我問這個問題的原因是,由於使用較大的DataFrame,我不會知道具有匹配值的Sample_ID數字。 –

+0

@SureshRaja你可以groupby索引,然後提取你想要的組。 –

+0

@SureshRaja'df1.groupby(level = 0)' –

3
g = df1.groupby(level=0) 

然後抓住任何gr OUP你與g.get_group(2)

  NaX NaU OC EC 
Sample_ID      
2   3.35 2.0 0.20 0.65 
2   3.40 2.0 0.25 0.55 

喜歡但這更多地參與比它需要。只需選擇@ ScottBoston的答案。

+0

'get_group',輝煌。 –

+0

我會接受讚美!但是'get_group'可能有點誇大了。 – piRSquared

+0

感謝您的輸入 –