- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
考虑 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/
问候,我有一个索引从 0 到 00.6279999999999999 的 df。 我使用 idxmax() 查找一列中最大变量的索引 - df[Column A]。假设索引是 0.5579999999
我正在尝试查找多索引 Pandas 数据帧中多列中最大值的索引。 Kommune Upplands Vallentuna... Kiruna Year Party 19
考虑 pd.Series s import pandas as pd import numpy as np np.random.seed([3,1415]) s = pd.Series(np.rand
我有一个如下所示的数据框: column_1 column_2 2 3 6 4 5 5 . . . 我想为上述数据框的每一行返回该行中
我有一个如下所示的数据框: column_1 column_2 2 3 6 4 5 5 . . . 我想为上述数据框的每一行返回该行中
我有一个由 3 列和 n 行组成的数据框。 分组前我的数据框看起来像 Index Max_Mass (kg/m) Max_Diameter (m) 1 10
我正在尝试计算夏季金牌数和冬季金牌数相对于金牌总数的最大差异。问题是我只需要考虑在夏季和冬季都至少赢得 1 枚金牌的国家。 Gold: Count of summer gold medals Gold
我有一个这样的数据框: A B C 0 1 2 1 1 3 -8 10 2 10 3 -20 3 50 7 1 我想根据每列中最大绝对值的索引重新排列它的列。
这个问题在这里已经有了答案: Pandas: Find index of the row with second highest value (2 个答案) 关闭 4 年前。 我有一个以 Count
这个问题在这里已经有了答案: Select the max row per group - pandas performance issue (2 个答案) 关闭 4 年前。 import time
我有一个看起来像这样的系列: delivery 2007-04-26 706 23 2007-04-27 705 10
我有一个包含一些财务数据的 python DataFrame,我正在尝试为其创建一些技术指标。我想弄清楚如何使用移动窗口函数来加速这个过程,而不是逐个元素地进行。对于每个索引,我想返回最近 30 天的
我有一个必须按三个级别分组的 DataFrame,然后返回最高值。每天每个唯一值都有一个返回,我想找到最高返回和细节。 data.groupby(['Company','Product','Indus
我正在尝试使用 df.loc[df.groupby(keys)['column'].idxmax()] 按最大值从组中选择行。 但是,我发现 df.groupby(keys)['column'].id
您好,我正在尝试了解 pd.DataFrame.idxmax 的效率,看看是否值得用可能更高效的自定义算法(例如,使用二进制搜索)替换它。 我想了解此方法背后的算法或至少了解其复杂性,但到目前为止我还
我有一个数据框,其中有两列,id 和 date。 df = pd.DataFrame([[1, '2019-05-20'], [1, '2019-05-20'], [1, '2018-04-23'],
我有一个数据框,其中有两列,id 和 date。 df = pd.DataFrame([[1, '2019-05-20'], [1, '2019-05-20'], [1, '2018-04-23'],
这是我的代码 from pandas import DataFrame, Series import pandas as pd import numpy as np income = DataFram
我发现 idxmax() 在 argmax() 不起作用的情况下有效(例如在整个数据帧上),但是在某些情况下我需要 argmax()?如果不是,我会把它从我的脑海中抹去。 最佳答案 有区别。 pd.D
Pandas dataframe.idxmax()函数返回请求轴上第一次出现最大值的索引。 有没有办法返回前 N 次出现的索引? 有问题的行: df2 = df.loc[df.groupby(['co
我是一名优秀的程序员,十分优秀!