我有一个有许多列的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,不一定都是全部)
答案 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')