2014-10-01 87 views
0

我有一個熊貓DataFrame與許多列和概率索引。下面的代碼可以生成DF有條件地抓取熊貓數據框中的列標題

import numpy as N 
probs = N.arange(0, 1, .1) 
data = N.random.random_integers(0, 500, (10,3)) 
df = DataFrame(data, index=probs, columns=['col1', 'col2', 'col3']) 

我要搶列標題,其中的細胞計數高於特定的概率某個閾值的樣本。例如,如果我在乎的概率> = 75,並在100以上的單元格的值我可以做以下

df[df['Probability'] >= .75] >= 100 

但基於該索引,如何獲取列標題,其中至少一個條目是真的? (即'col1'至少有一個值的概率高於.75並且大於100,並不一定都是這些值)

回答

2

您可以將布爾向量傳遞給列軸.loc。例如,如果你想在那裏的所有值都高於100列,你的面具是:

In [111]: mask = (df[df.index > .75] >= 100).any() 

然後,你可以通過這個來.loc進行過濾。

In [112]: df.loc[:, mask] 
Out[112]: 
    col1 col2 col3 
0.0 358 30 241 
0.1 330 71 119 
0.2 311 92 204 
0.3 347 245 344 
0.4 214 219 347 
0.5 152 241 65 
0.6 232 487 61 
0.7 478 314 196 
0.8 477 317 291 
0.9 303 99 342 

如果您只是想要列標題,您可以將掩碼應用於自身。

In [119]: mask[mask].index 
Out[119]: Index([u'col1', u'col2', u'col3'], dtype='object') 
+0

這不完全給我我正在尋找的行爲。我希望所有列的最小值在100以上,而不一定是全部。我編輯了我的問題,以使其更清晰 – sedavidw 2014-10-01 17:35:14

+0

@sedavidw - 將'all()'更改爲'any()'(我也編輯了答案)。我使用'all'只是爲了展示這種技術,因爲在這種情況下'any'實際上並不過濾任何東西。 – chrisb 2014-10-01 17:40:03

+0

謝謝!太棒了 – sedavidw 2014-10-01 18:45:46