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

Bee*_*Gee 1 python python-2.7 pandas

这是一个简单的问题,但我已经找到了"切片" DataFramesPandas折腾,来自哪里R.

我在DataFrame df下面有7列:

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
Run Code Online (Sandbox Code Playgroud)

如何切片df以产生包含至少一个负数的列的列表?

DSM*_*DSM 5

您可以通过构建适当的Series然后使用它来索引来选择它们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
Run Code Online (Sandbox Code Playgroud)

然后

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

要么

>>> df.columns[(df < 0).any()].tolist()
['fld1', 'fld2', 'fld3', 'fld6']
Run Code Online (Sandbox Code Playgroud)

取决于您想要的数据结构.我们也可以df直接使用这个io索引:

>>> 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
Run Code Online (Sandbox Code Playgroud)