【发布时间】:2021-09-04 04:20:36
【问题描述】:
谁能告诉我在代码中哪里出错了,因为值都是我不想要的 NaN。对于每个 RSIndex 值,我希望有一系列平均高 25 个以前的 RSIndex 值(您可以将其视为回溯期)。
def AvgHigh(ser, src, cnt, val) :
total = 0.0
count = 0
for i in (0, ser) :
for a in range(i, i+cnt) :
if src[a] > val :
count = count + 1
total = total + src[a]
elif src[a] <= val :
count = count + 0
total = total + 0
return round(total / count)
df['RSI_high'] = pd.Series(AvgHigh(len(df['RSIndex']), df['RSIndex'], 25, 52)).fillna(0)
【问题讨论】:
-
AvgHigh只返回一个值。你期待它做什么?您是否可能打算使用yield而不是return,以便为系列中的每个项目返回一个值?如果是这样,那么您还需要for i in range(ser):而不是只遍历两个值。 -
非常感谢蒂姆,是的,这就是我的意思,我希望每个项目都有一个高价值的参考,所以产量确实有很大帮助,是的,我错过了范围功能,但是当我再次运行时,它给了我一个 keyError
-
len(df['RSIndex]) 是 29983
File "C:\Users\RAHUL\AppData\Roaming\Python\Python39\site-packages\pandas\core\indexes\range.py", line 353, in get_loc raise KeyError(key) from err KeyError: 29983 -
你明白为什么,不是吗?列表中有 29983 项。当您到达项目 29982 时,您仍在向前看 25 个项目,这些项目正好在列表的末尾。也许你的范围应该是
range(ser-cnt)。 -
非常感谢@TimRoberts,你这东西成功了,干杯
标签: python pandas dataframe function nan