2013-10-04 73 views
2

我有一個數據框,其中有多個列,其中索引是一個時間戳,其他三個是階段號指示符,其餘的只是數據。我試圖做的是找到三個指標列在同一個階段類型中,其中包含一個數字列表。在熊貓數據框中查找索引值,其中列是相同的

So my data frame looks like this: 
Index     PhaseA PhaseB PhaseC DataCol 
01/07/2013 00:00:00  400  415  425  1.2 
01/07/2013 00:01:00  415  420  410  1.2 
01/07/2013 00:02:00  415  423  415  1.2 
01/07/2013 00:03:00  415  423  420  1.2 
01/07/2013 00:04:00  415  423  423  1.2 
01/07/2013 00:05:00  415  423  425  1.2 

因此,在這種情況下,簡單的我正在尋找在全部三個階段號是415,423,427和432的值。這意味着,我想在這種情況下獲得行是2分鐘一和4分鐘之一。

我最好在尋找這個已經發生的日期和時間,然後我可以使用其他數據列進一步調查它。另外,這不太可能是我必須這樣做的時候,所以能夠改變我感興趣的數字和列將是很好的。

到目前爲止,我設法得到它與類似的代碼工作:

df[ (df["PhaseA"] == (415))] 

and then for multiple ones: 

df[(df["PhaseA"] == (415))|(df["PhaseA"] == (420))] 

但是,這是會得到非常混亂迅速,將是難以修改以後。

任何幫助將不勝感激,因爲我相對較新的python和編程一般。

回答

5
mask = df[['PhaseA','PhaseB','PhaseC']].isin([415,423,427,432]).all(axis=1) 
df.ix[mask] 

例如,

In [51]: mask = df[['PhaseA','PhaseB','PhaseC']].isin([415,423,427,432]).all(axis=1) 
In [52]: mask 
Out[52]: 
Index 
2013-01-07 00:00:00 False 
2013-01-07 00:01:00 False 
2013-01-07 00:02:00  True 
2013-01-07 00:03:00 False 
2013-01-07 00:04:00  True 
2013-01-07 00:05:00 False 
dtype: bool 

In [53]: df.ix[mask] 

產量

Out[53]: 
        PhaseA PhaseB PhaseC DataCol 
Index            
2013-01-07 00:02:00  415  423  415  1.2 
2013-01-07 00:04:00  415  423  423  1.2 

DataFrame.isin將被添加到大熊貓V0.13。如果沒有DataFrame.isin,您可以創建mask

mask = df[['PhaseA','PhaseB','PhaseC']].applymap(set([415,423,427,]).__contains__).all(axis=1) 
+0

感謝@unutbu的回覆。這看起來像它會做我想要的,但我得到一個錯誤,因爲DataFrame顯然沒有名爲isin的屬性。這是因爲我在0.12熊貓身上,因爲看起來我相信DataFrames尚未發佈。有沒有辦法做到這一點沒有isin? – Alarr

+0

你是對的!對於那個很抱歉。我已經添加了上面的代碼來顯示如何在不使用isin的情況下定義'mask'。 – unutbu

相關問題