gpt4 book ai didi

python - 我如何计算滚动 idxmax

转载 作者:太空狗 更新时间:2023-10-30 00:26:02 29 4
gpt4 key购买 nike

考虑 pd.Series s

import pandas as pd
import numpy as np

np.random.seed([3,1415])
s = pd.Series(np.random.randint(0, 10, 10), list('abcdefghij'))
s

a 0
b 2
c 7
d 3
e 8
f 7
g 0
h 6
i 8
j 6
dtype: int64

我想获取 3 的滚动窗口的最大值的索引

s.rolling(3).max()

a NaN
b NaN
c 7.0
d 7.0
e 8.0
f 8.0
g 8.0
h 7.0
i 8.0
j 8.0
dtype: float64

我想要的是

a    None
b None
c c
d c
e e
f e
g e
h f
i i
j i
dtype: object

我做了什么

s.rolling(3).apply(np.argmax)

a NaN
b NaN
c 2.0
d 1.0
e 2.0
f 1.0
g 0.0
h 0.0
i 2.0
j 1.0
dtype: float64

这显然不是我想要的

最佳答案

没有简单的方法可以做到这一点,因为传递给滚动应用函数的参数是一个普通的 numpy 数组,而不是 pandas 系列,所以它不知道索引。此外,滚动函数必须返回一个 float 结果,因此如果它们不是 float ,则不能直接返回索引值。

这是一种方法:

>>> s.index[s.rolling(3).apply(np.argmax)[2:].astype(int)+np.arange(len(s)-2)]
Index([u'c', u'c', u'e', u'e', u'e', u'f', u'i', u'i'], dtype='object')

我们的想法是获取 argmax 值并通过添加一个指示我们在系列中有多远的值来将它们与系列对齐。 (也就是说,对于第一个 argmax 值,我们添加零,因为它为我们提供了从原始序列中的索引 0 开始的子序列的索引;对于第二个 argmax 值,我们添加了一个,因为它为我们提供了一个子序列的索引从原始系列中的索引 1 开始的子序列;等等)

这给出了正确的结果,但不包括开头的两个“None”值;如果需要,您必须手动将它们添加回去。

an open pandas issue添加滚动 idxmax。

关于python - 我如何计算滚动 idxmax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40101130/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com