使用pandas或Numpy根据列d选择一系列行

2024-03-29 01:25:35 发布

您现在位置:Python中文网/ 问答频道 /正文

你好,我有多个股票我从熊猫CSV生成。我的目标似乎很简单,我每天都在测量体积的百分比差异

    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行数,即(在所选行之前拉7行,在所选行之后拉30行,所选行的Volume\u Pct\u change>;=1.5),这样我就可以绘制出图表,并看到在Volume峰值之前和之后随时间的变化。如果有办法用Numpy的话我会得到奖励。你知道吗

编辑一:这么跑

df = pd.read_csv('AAPL.csv') c=df['Volume_Pct_Change'] >= 1.2 for idx in c: df.iloc[(idx-7):(idx+30)]

当条件存在时,为c提供正确的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)]放进去工作,但是在数据帧中只有一组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))

达到了预期的效果,而且速度很快。你知道吗


Tags: csvinfalseformatdfforreadchange
2条回答

像这样的可能?你知道吗

c=df.index[df['Volume_Pct_Change'] >= 1.5]
for idx in c:
    df.iloc[(idx-7):(idx+30)]

使用iloc得到满足>;150%条件的行索引列表。 然后将列表转换为一个新列表,列表中每个值的范围为-7到+30。 使用此新列表可获得所需的结果。你知道吗

相关问题 更多 >