gpt4 book ai didi

最近值的 Python 百分位数与先前值的窗口

转载 作者:行者123 更新时间:2023-11-28 18:10:24 25 4
gpt4 key购买 nike

抱歉,我是一个希望从 R 过渡的菜鸟!

可重现的数据示例;

df = pd.DataFrame(1.26 + np.random.rand(size)/100.0,
index=pd.date_range('20160101 09:00:00',
periods=size,
freq='60s'),
columns=['ATR20'])

我想在 ATR20 列中取一个值,并根据 ATR20 列的前 n 个值的滚动窗口计算其当前百分位数。

据我所知:

for n in range(1,len(df)):
print(sum(df.ATR20[n:n+20] > df.ATR20))

这给出了以下错误:

ValueError: Can only compare identically-labeled Series objects

我确信有一种更简单的方法可以使用更简洁的语法来执行此操作,但我的搜索没有找到足够接近的方法。

谢谢。

最佳答案

我认为这会得到您要找的东西。我使用了你的示例,数据框中只有 10 个元素和一个包含 3 个元素的滚动窗口,所以粘贴到这里时它会更短。

size = 10
df = pd.DataFrame(1.26 + np.random.rand(size)/100.0,
index=pd.date_range('20160101 09:00:00',
periods=size,
freq='60s'),
columns=['ATR20'])

# ATR20
# 2016-01-01 09:00:00 1.262522
# 2016-01-01 09:01:00 1.265116
# 2016-01-01 09:02:00 1.265051
# 2016-01-01 09:03:00 1.261109
# 2016-01-01 09:04:00 1.262699
# 2016-01-01 09:05:00 1.266710
# 2016-01-01 09:06:00 1.260186
# 2016-01-01 09:07:00 1.268001
# 2016-01-01 09:08:00 1.263227
# 2016-01-01 09:09:00 1.261331

您可以使用 df.rollingapply 将函数应用于滚动窗口。我认为我在这里使用的计算或多或少是您正在寻找的:

window = 3
df.rolling(window).apply(lambda x: sum([x[-1] > i for i in x]) / (window - 1))

# ATR20
# 2016-01-01 09:00:00 NaN
# 2016-01-01 09:01:00 NaN
# 2016-01-01 09:02:00 0.263665
# 2016-01-01 09:03:00 0.000000
# 2016-01-01 09:04:00 0.263932
# 2016-01-01 09:05:00 0.527632
# 2016-01-01 09:06:00 0.000000
# 2016-01-01 09:07:00 0.527024
# 2016-01-01 09:08:00 0.263754
# 2016-01-01 09:09:00 0.000000

关于最近值的 Python 百分位数与先前值的窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51070679/

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