`Pandas argmax` 在屏蔽后获取所有 `True` 索引 (Python 3)(例如 (pd.Series > 0).argmax()))
`Pandas argmax` to get all `True` indices after masking (Python 3) (e.g. (pd.Series > 0).argmax()))
我想做什么,但 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
中的不同功能来完成吗?
您可以使用 compress
:
idx = pd.Series(np.arange(6), index=list("abcdef")).compress(lambda x: x % 2 == 0).index
结果输出:
Index(['a', 'c', 'e'], dtype='object')
在最新的pandas版本中,可以直接将过滤函数传给[]
或.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')
我想做什么,但 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
中的不同功能来完成吗?
您可以使用 compress
:
idx = pd.Series(np.arange(6), index=list("abcdef")).compress(lambda x: x % 2 == 0).index
结果输出:
Index(['a', 'c', 'e'], dtype='object')
在最新的pandas版本中,可以直接将过滤函数传给[]
或.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')