gpt4 book ai didi

python - Pandas 高效 VWAP 计算

转载 作者:太空狗 更新时间:2023-10-29 22:06:40 26 4
gpt4 key购买 nike

我有以下代码,使用它我可以通过三行 Pandas 代码计算成交量加权平均价格。

import numpy as np
import pandas as pd
from pandas.io.data import DataReader
import datetime as dt

df = DataReader(['AAPL'], 'yahoo', dt.datetime(2013, 12, 30), dt.datetime(2014, 12, 30))
df['Cum_Vol'] = df['Volume'].cumsum()
df['Cum_Vol_Price'] = (df['Volume'] * (df['High'] + df['Low'] + df['Close'] ) /3).cumsum()
df['VWAP'] = df['Cum_Vol_Price'] / df['Cum_Vol']

我正在尝试寻找一种方法来编写此代码,而无需使用 cumsum() 作为练习。我正在尝试找到一种解决方案,它一次性提供 VWAP 列。我已经使用 .apply() 尝试了以下行。逻辑在那里,但问题是我无法在第 n 行中存储值以便在第 (n+1) 行中使用。您如何在 pandas 中处理此问题 - 仅使用外部连音符或字典来临时存储累积值?

df['Cum_Vol']= np.nan
df['Cum_Vol_Price'] = np.nan
# calculate running cumulatives by apply - assume df row index is 0 to N
df['Cum_Vol'] = df.apply(lambda x: df.iloc[x.name-1]['Cum_Vol'] + x['Volume'] if int(x.name)>0 else x['Volume'], axis=1)

是否有针对上述问题的一次性解决方案?

编辑:

我的主要动机是了解幕后发生的事情。所以,它主要是为了锻炼而不是任何正当理由。我相信大小为 N 的 Series 上的每个 cumsum 的时间复杂度为 N(?)。所以我想知道,不是运行两个单独的 cumsum,而是我们可以一次性计算两者 - 沿着 this 的路线.很高兴接受对此的回答 - 而不是工作代码。

最佳答案

快速编辑:只是想感谢 John 的原始帖子:)

通过@jit-ing numpy 的版本你可以获得更快的结果:

@jit
def np_vwap():
return np.cumsum(v*(h+l)/2) / np.cumsum(v)

这让我 每个循环 50.9 µs 而不是使用上面的 vwap 版本的 每个循环 74.5 µs

关于python - Pandas 高效 VWAP 计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29298789/

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