当前位置: 首页 > 面试题库 >

如何计算滚动idxmax

壤驷茂实
2023-03-14
问题内容

考虑 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

这显然不是我想要的


问题答案:

没有简单的方法可以执行此操作,因为传递给rolling-applied函数的参数是一个普通的numpy数组,而不是pandas
Series,因此它不了解索引。此外,滚动函数必须返回浮点结果,因此,如果它们不是浮点的,则不能直接返回索引值。

这是一种方法:

>>> 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值,我们加一个,因为它给我们索引到a从原始系列的索引1开始的子序列;依此类推)

这样可以得出正确的结果,但是开头不包括两个“ None”值。如果需要,您必须手动将其添加回去。

有一个开放的熊猫问题来添加滚动idxmax。



 类似资料:
  • 问题内容: 似乎没有函数可以简单地计算numpy / scipy的移动平均值,从而导致解决方案复杂。 我的问题有两个: (正确)用numpy实现移动平均的最简单方法是什么? 由于这似乎很简单且容易出错,是否有充分的理由不将电池包括在这种情况下? 问题答案: 一种简单的方法是使用。其背后的想法是利用离散卷积的计算方式,并使用它来返回 滚动平均值 。这可以通过对长度等于我们想要的滑动窗口长度的序列进行

  • 问题内容: 样本数据可能会有助于解释我想做的事情,而不是解释它,因此,我将从此开始。 这是我目前正在使用的数据: 我正在尝试在15分钟的时间内滚动显示此数据中的出现次数。该数据的预期结果如下: 样本数据: 我可以通过以下方式 使它 起作用: 但是,我想避免使用子查询,而建议使用(或其他任何可能的解决方案)解决方案。 这可能吗?还是子查询是正确的解决方案? 问题答案: 一种方法-如果表很大,可能比嵌

  • 我正在尝试优化一个程序,该程序需要在数据流的每个位置(字节)为数据流中的恒定大小窗口计算哈希。在比可用RAM大得多的磁盘文件中查找重复时需要它。目前我为每个窗口计算单独的md5哈希,但它花费了很多时间(窗口大小为几千字节,因此每个数据字节被处理几千次)。我想知道是否有一种方法可以在恒定(与窗口大小无关)时间内计算每个后续哈希(例如移动平均中1个元素的加减)?哈希函数可以是任何东西,只要它不提供长哈

  • 我有一分钟一分钟的熊猫数据帧df。我希望将加权应用于返回,并计算滚动加权均方差,窗口=10。我可以计算非加权性病,年化: 在Numpy中还有另一个关于加权std的问题,但我对滚动加权std很好奇。(加权标准偏差,单位为NumPy?) 计算加权标准差的公式为:https://math.stackexchange.com/questions/320441/standard-deviation-of-t