获取包含负值的列的列名列表

时间:2016-01-21 16:56:04

标签: python python-2.7 pandas

这是一个简单的问题,但我发现"切片"来自DataFrames的{​​{1}}令人沮丧的Pandas

我的下面有R DataFrame,有7列:

df

如何以这样的方式对df Out[77]: fld1 fld2 fld3 fld4 fld5 fld6 fld7 0 8 8 -1 2 1 7 4 1 6 6 1 7 5 -1 3 2 2 5 4 2 2 8 1 3 -1 -1 7 2 3 2 0 4 6 6 4 2 0 5 2 5 -1 5 7 1 5 8 2 6 7 1 -1 0 1 8 1 7 6 2 4 1 2 6 1 8 3 4 4 5 8 -1 4 9 4 4 3 7 7 4 5 进行切片,以便生成包含至少一个负数的列的列表?

1 个答案:

答案 0 :(得分:5)

您可以通过构建适当的系列然后使用它来索引df

来选择它们
>>> df < 0
    fld1   fld2   fld3   fld4   fld5   fld6   fld7
0  False  False   True  False  False  False  False
1  False  False  False  False  False   True  False
2  False  False  False  False  False  False  False
3   True   True  False  False  False  False  False
4  False  False  False  False  False  False  False
5   True  False  False  False  False  False  False
6  False  False   True  False  False  False  False
7  False  False  False  False  False  False  False
8  False  False  False  False  False   True  False
9  False  False  False  False  False  False  False
>>> (df < 0).any()
fld1     True
fld2     True
fld3     True
fld4    False
fld5    False
fld6     True
fld7    False
dtype: bool

然后

>>> df.columns[(df < 0).any()]
Index(['fld1', 'fld2', 'fld3', 'fld6'], dtype='object')

>>> df.columns[(df < 0).any()].tolist()
['fld1', 'fld2', 'fld3', 'fld6']

取决于您想要的数据结构。我们也可以直接将此io索引用于df

>>> df.loc[:,(df < 0).any()]
   fld1  fld2  fld3  fld6
0     8     8    -1     7
1     6     6     1    -1
2     2     5     4     8
3    -1    -1     7     2
4     6     6     4     5
5    -1     5     7     8
6     7     1    -1     8
7     6     2     4     6
8     3     4     4    -1
9     4     4     3     4