【发布时间】:2020-10-07 13:35:01
【问题描述】:
任务:我有一系列每日收盘价,我想实现以下目标: (i) 计算任意 5 天窗口内任意两天之间的最大百分比变化 (ii) 以 5 天滚动窗口为基础存储这些最大值 (iii) 计算所有 5 天滚动窗口中这些最大值的第 99 个百分位
相当简单的问题。我对 Python 很陌生,发现自己混合了 Python 列表、Numpy 数组和 Pandas 系列来实现上述目标,我确信这不是高效编码的正确方法。
问题:我在下面附上我的代码。有没有办法实现相同的目标,而不必为这个简单的任务使用多个对象(即一个 Pandas DataFrame,然后将其复制到一个 Numpy Array 中,用于修改 Python 列表,最终转换为熊猫系列)?另外,内循环可以通过原生Numpy或Pandas迭代方法(如ndenumerate)来实现,而不是通过索引循环吗?
#pd_prices is a Pandas DataFrame containing daily open, high, low, and close prices
#store just closing prices into a Numpy array
np_prices = np.array(pd_prices['close'])
my_max = [0] # Python list that will be appended
# loop through Numpy array using ndenumerate
for i, price in np.ndenumerate(np_prices):
local_max = 0.0
j = min(i[0],(np_prices.size - 6))
for k in range(1,6,1):
# compute local % change between two days within a 5-day window
pct_change = (np_prices[j+k] / np_prices[j]) - 1
# store max over the current 5-day window
local_max = max(local_max,abs(pct_change))
# save max from current 5-day window into list before computing max over next 5-day window
my_max.append(local_max)
#in order to use Pandas quantile function, the list is converted to Pandas Series object
pd_maxes = pd.Series(my_max)
print(pd_maxes.quantile(0.99))
【问题讨论】:
-
您能否提供更多有关维度的信息?
np_prices和my_max有多大?您绝对可以在numpy和np.quantile(my_max, .99, axis=?)中完成所有操作。 -
我投票结束这个问题,因为它属于codereview.stackexchange.com
-
@Mad Physicist:结束会转化为删除,还是只是结束进一步讨论?
-
@MadPhysicist 虽然这可能是未来 CR 的主题,但请不要以 Code Review 站点的存在作为关闭问题的理由。评估请求并使用需要关注(就像我在这里所做的那样)、主要基于意见等原因。然后你可以向 OP 提及它可以是如果是 on-topic,则发布在 Code Review 上。请参阅Does being on-topic at another Stack Exchange site automatically make a question off-topic for Stack Overflow?
-
一个问题被关闭,在技术方面,意味着将无法发布新的答案,并且拥有 10,000 或更多声誉的用户可以在几天后将其删除。它本身不会导致问题被删除。
标签: python pandas numpy numpy-ndarray