你好,我有多个csvs的股票,我产生的熊猫。我的目标似乎很简单,我一天比一天测量音量的百分比差异。
for ticker in tickers:
df = pd.read_csv('stock_dfs/{}.csv'.format(ticker))
df['Volume_Pct_Change'] = df['Volume'].pct_change().fillna(0)
df.to_csv('stonks_dfs/{}.csv'.format(ticker))这很容易。现在,我想找到所有的时间,体积是150%以上。我在另一个python脚本中这样做,与提取原始数据不同。
with open('sp500tickers.pickle', "rb") as f:
tickers = pickle.load(f)
for ticker in tickers:
df = pd.read_csv('stock_dfs/{}.csv'.format(ticker))
df_vpc = df.loc[df['Volume_Pct_Change'] >= 1.5]
df_vpc.to_csv('{}.csv'.format(ticker))这对我很有好处。
我的问题是,我希望在选定的行之前和之后提取X行数量,即在具有Volume_Pct_change >= 1.5的选定行之前和之后(7行和30行),这样我就可以在卷峰值之前和之后绘制并查看随时间变化的情况。如果有办法使用Numpy的话,我会得到额外的奖励。
编辑1:所以运行
df = pd.read_csv('AAPL.csv') c=df['Volume_Pct_Change'] >= 1.2 for idx in c: df.iloc[(idx-7):(idx+30)]
当条件存在时,给出正确的true输出。
114,False 115,False 116,False 117,False 118,True 119,False 120,False 121,False
但是在运行df.iloc[(idx-7):(idx+30)]之后,当我将df导出到csv时,它并没有改变。
编辑2:好的,开始运行
df = pd.read_csv('AAPL.csv') c = df.index[df['Volume_Pct_Change'] >= 1.2] for idx in c: df.iloc[(idx-7):(idx+30)]
在导出时,我认为df没有什么不同,但使用d=df.iloc[(idx-7):(idx+30)]可以工作,但在dataframe中只有一组df,这让我感到困惑。只剩下最后一个了。似乎它循环地覆盖了数据,每个人都以最后一个结束?
最后编辑:谢谢大家的帮助
df = pd.read_csv('AAPL.csv') c = df.index[df['Volume_Pct_Change'] >= 1.2] for idx in c: d = df.iloc[(idx-7):(idx+30)] d.to_csv('{}.csv'.format(idx))
取得了预期的结果,而且速度相当快。
发布于 2019-09-15 05:08:17
可能是这样吧?
c=df.index[df['Volume_Pct_Change'] >= 1.5]
for idx in c:
df.iloc[(idx-7):(idx+30)]发布于 2019-09-15 04:55:48
利用熊猫df获得符合>150%条件的行指数列表。然后将列表转换为列表中每个值的范围为-7到+30的新列表。使用这个新列表获得所需的结果。
https://stackoverflow.com/questions/57941191
复制相似问题