我刚刚开始使用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函数吗?
答案 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,而是使用您想要的任何值作为删除的截止值。