我刚刚开始使用 Pandas 作为处理二维数据数组的工具。这是 super 压倒性的,即使在阅读了文档之后。你可以做的事情太多了,以至于我不知道该怎么做,如果这有意义的话。
我的数据框(简化):
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()
进行索引。
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
接下来,我们用它做一个 bool 表达式:
In [31]: df.max() > 0
Out[31]:
a False
b True
c True
dtype: bool
接下来,你可以通过这个索引 df.columns(这被称为 bool 索引):
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。
关于Python Pandas 根据列的最大值删除列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26897536/