2016-05-30 18 views
-1
  1. を計算するには、私はデータの長さを持っていることは
  2. 3000を超える以下であるが、それ以上2分かかっ20days値を作成するためのコード(株式市場のボリューム比)
  3. です。
  4. 実行時間を短縮する良い方法があります。どのようにより効率的に圧延率

    import pandas as pd 
    import numpy as np 
    from pandas.io.data import DataReader 
    import matplotlib.pylab as plt 
    data = DataReader('047040.KS','yahoo',start='2010') 
        data['vr']=0 
        data['Volume Ratio']=0 
        data['acend']=0 
    data['vr'] = np.sign(data['Close']-data['Open']) 
    data['vr'] = np.where(data['vr']==0,0.5,data['vr']) 
    data['vr'] = np.where(data['vr']<0,0,data['vr']) 
    data['acend'] = np.multiply(data['Volume'],data['vr']) 
    
    for i in range(len(data['Open'])): 
        if i<19: 
         data['Volume Ratio'][i]=0 
        else: 
         data['Volume Ratio'][i] = ((sum(data['acend'][i-19:i]))/((sum(data['Volume'][i-19:i])-sum(data['acend'][i-19:i]))))*100 
    
+0

くださいタイトルを編集することを検討してください。ウルの問題。 –

+0

[最小、完全、および検証可能な例](http://stackoverflow.com/help/mcve)を追加できますか? – jezrael

答えて

0

条件行選択とrolling.sum()の使用を検討:

data.loc[data.index[:20], 'Volume Ratio'] = 0 
data.loc[data.index[20:], 'Volume Ratio'] = (data.loc[:20:, 'acend'].rolling(window=20).sum()/(data.loc[:20:, 'Volume'].rolling(window=20).sum() - data.loc[:20:, 'acend'].rolling(window=20).sum()) * 100 

または、簡略化 - .rolling.sum()だけ.fillna(0)を使用するように、最初の20の値のnp.nanを作成します。

data['new_col'] = data['acend'].rolling(window=20).sum().div(data['Volume'].rolling(window=20).sum().subtract(data['acend'].rolling(window=20).sum()).mul(100).fillna(0)