你好,我有从熊猫生成的多只股票的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的选定行之前和之后的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后我看不到df的变化。
编辑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)]
起作用了,但是在数据框中只有一组它们使我感到困惑。它仅保存最后一个。似乎每个人都以最后一个结尾的数据帧覆盖整个数据帧?
最终编辑:谢谢大家的帮助
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))
具有理想的结果,而且速度很快。
答案 0 :(得分:1)
使用pandas df iloc获取满足> 150%条件的行索引列表。 然后将列表转换为新列表,列表中每个值的范围为-7至+30。 使用此新列表可获得所需的结果。
答案 1 :(得分:1)
也许是这样?
c=df.index[df['Volume_Pct_Change'] >= 1.5]
for idx in c:
df.iloc[(idx-7):(idx+30)]