有条件地抓住pandas数据帧中的列标题

时间:2014-10-01 17:16:57

标签: python pandas dataframe

我有一个有许多列的pandas 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

但是根据该索引编制,我如何获得至少一个条目为True 的列标题? (即' col1'至少有一个值的概率高于.75且大于100,不一定都是全部)

1 个答案:

答案 0 :(得分: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')