1

我想做的但argmax只给了我第一个值True

Se = pd.Series(np.arange(6), index=list("abcdef"))
#a    0
#b    1
#c    2
#d    3
#e    4
#f    5
#dtype: int64

mask = (Se % 2 == 0)
#a     True
#b    False
#c     True
#d    False
#e     True
#f    False
#dtype: bool

mask.argmax()
#'a'

我必须做的是:

Se[mask].index
# Index(['a', 'c', 'e'], dtype='object')

这并不太方便,但我必须实例化第Series一个,这会降低我的工作效率。能够做到这一点会很好:

(pd.Series(np.arange(6), index=list("abcdef")) % 2 == 0).argmax()

我的问题是:我怎样才能做到这一点argmax?如果这不能用 来完成argmax,我可以用不同的功能来做pandas吗?

4

2 回答 2

2

您可以使用compress

idx = pd.Series(np.arange(6), index=list("abcdef")).compress(lambda x: x % 2 == 0).index

结果输出:

Index(['a', 'c', 'e'], dtype='object')
于 2016-11-11T23:15:48.090 回答
0

在最新的 pandas 版本中,您可以直接将 filter 函数传递给[]or .loc[]

Se[lambda x: x%2 == 0].index  # or Se.loc[lambda x: x%2 == 0].index
# Index([u'a', u'c', u'e'], dtype='object')
于 2016-11-11T23:28:45.667 回答