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

时间:2014-11-12 22:05:29

标签: python numpy 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,那么我想要一个新的DataFrame:

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

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

1 个答案:

答案 0 :(得分:8)

使用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,而是使用您想要的任何值作为删除的截止值。