Python Pandas 根据列的最大值删除列



我只是开始使用Pandas作为修改二维数据数组的工具。即使在阅读文档之后,它也非常压倒性。你可以做很多事情,以至于我不知道该怎么做,如果这有任何意义的话。

我的数据帧(简体):

Date       Stock1  Stock2   Stock3
2014.10.10  74.75  NaN     NaN
2014.9.9    NaN    100.95  NaN 
2010.8.8    NaN    NaN     120.45

所以每列只有一个值。

我想删除所有最大值小于 x 的列。所以在这里举个例子,如果 x = 80,那么我想要一个新的数据帧:

Date        Stock2   Stock3
2014.10.10   NaN     NaN
2014.9.9     100.95  NaN 
2010.8.8     NaN     120.45

如何实现这一点?我看过dataframe.max(),它给了我一个系列。我可以使用它,或者在 select() 中以某种方式拥有一个 lambda 函数吗?

使用df.max()进行索引。

In [19]: from pandas import DataFrame
In [23]: df = DataFrame(np.random.randn(3,3), columns=['a','b','c'])
In [36]: df
Out[36]: 
          a         b         c
0 -0.928912  0.220573  1.948065
1 -0.310504  0.847638 -0.541496
2 -0.743000 -1.099226 -1.183567

In [24]: df.max()
Out[24]: 
a   -0.310504
b    0.847638
c    1.948065
dtype: float64

接下来,我们用这个做一个布尔表达式:

In [31]: df.max() > 0
Out[31]: 
a    False
b     True
c     True
dtype: bool

接下来,你可以通过这个来索引 df.columns(这称为布尔索引):

In [34]: df.columns[df.max() > 0]
Out[34]: Index([u'b', u'c'], dtype='object')

你终于可以传递给DF了:

In [35]: df[df.columns[df.max() > 0]]
Out[35]: 
          b         c
0  0.220573  1.948065
1  0.847638 -0.541496
2 -1.099226 -1.183567

当然,您可以使用所需的任何值作为丢弃的截止值,而不是 0。