Python 在dataframe中有条件地获取列标题

Python 在dataframe中有条件地获取列标题,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个pandasDataFrame,它有许多列,并按概率索引。下面是可以生成示例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']) 我想获取列标题,其中单元格中的计数高于特定概率的某个阈值。例如,如果我关心概率>

我有一个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

但是,基于该索引,如何获得至少有一个条目为真的列标题?(即“col1”至少有一个值以大于.75和大于100的概率索引,不一定全部都是)

您可以将布尔向量传递给
.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')

这不是我想要的行为。我想要至少有一个值大于100的所有列,而不是所有列。我对我的问题进行了编辑,使其更具说服力clear@sedavidw-将
all()
更改为
any()
(我也编辑了答案)。我使用
all
只是为了展示这项技术,因为在这种情况下
any
实际上不会过滤任何内容。谢谢!这太完美了