Python 在dataframe中有条件地获取列标题
我有一个pandasPython 在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']) 我想获取列标题,其中单元格中的计数高于特定概率的某个阈值。例如,如果我关心概率>
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
实际上不会过滤任何内容。谢谢!这太完美了