Python Pandas基于列的最大值删除列

11

我刚开始使用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函数吗?


我已经查看了df.max()以获取列的最大值。目前还不确定我可以用这个对象做什么。我现在完全是Panda的新手... - professorDante
1个回答

15
使用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。


8
df.loc[:,df.max() > 0] 是一个更好的选择来进行选择操作,因为它提供了一个可以用来修改原始 DataFrame 的控制器。 - DSM
1
是的,那是一个聪明的解决方案。你应该将它作为一个单独的回答发布。 - Adam Hughes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接