2016-06-19 2 views
-1
Date  Open Close Buying Selling Cut_Off_Price 
2009.11.11 4.805 4.43 0  0 0 
2009.11.12 4.51 4.505 0  0 0 
2009.11.13 4.545 4.765 1  0 3.812 
2009.11.16 4.78 4.76 0  0 0 
2009.11.17 4.755 4.605 0  0 0 
2009.11.18 4.56 4.495 0  0 0 
2009.11.19 4.495 4.535 1  0 3.628 
2009.11.20 4.535 4.63 0  0 0 
2009.11.23 4.7  4.67 0  0 0 
2009.11.24 4.74 4.91 0  0 0 
2009.11.25 4.97 4.87 0  0 0 
2009.11.26 4.93 4.97 0  0 0 
2009.11.27 5  4.94 0  0 0 
2009.11.30 4.865 4.86 0  0 0 
2009.12.1 4.83 3.855 0  0 0 
2009.12.2 4.89 4.89 0  0 0 
2009.12.3 4.85 4.71 0  0 0 
2009.12.4 4.78 4.76 0  0 0 
2009.12.7 3.225 3.565 0  0 0 
2009.12.8 3.6  3.705 0  0 0 
2009.12.9 3.76 3.575 0  0 0 
2009.12.10 3.575 3.79 0  0 0 
2009.12.11 3.84 3.84 0  0 0 
2009.12.14 3.85 3.81 0  0 0 
2009.12.15 3.84 3.985 0  0 0 
2009.12.16 3.985 4.1  0  0 0 
2009.12.17 4.105 4.165 0  0 0 
2009.12.18 4.22 4.15 0  0 0 
2009.12.21 4.145 4.5  0  0 0 
2009.12.22 4.55 4.76 0  0 0 
2009.12.23 4.705 4.72 0  0 0 
2009.12.24 4.9  4.78 0  0 0 
  1. データは株価であり、私はCut_Off_Priceは、価格を購入するいくつかの割合を計算している、売買シグナルを作ったデータフレーム。 時が経つにつれ、価格の最初の日が価格を下回っていれば、私は売り切れの信号を作りたいと思っています。および販売日。

私の欲求の結果は以下のは、実行中の時間をredueceする方法、パンダは

Date Open Close Buying Selling Cut_Off_Price Cut_Off_Signal Sell_Out Sell_Out_Date 
2009.11.11 4.805 4.43 0  0 0 0 0  0 
2009.11.12 4.510 4.505 0  0 0 0 0  0 
2009.11.13 4.545 4.765 1  0 3.812 0 1  2009.12.1 
2009.11.16 4.780 4.760 0  0 0 0 0  0 
2009.11.17 4.755 4.605 0  0 0 0 0  0 
2009.11.18 4.560 4.495 0  0 0 0 0  0 
2009.11.19 4.495 4.535 1  0 3.628 0 1  2009.12.7 
2009.11.20 4.535 4.630 0  0 0 0 0  0 
2009.11.23 4.700 4.670 0  0 0 0 0  0 
2009.11.24 4.740 4.910 0  0 0 0 0  0 
2009.11.25 4.970 4.870 0  0 0 0 0  0 
2009.11.26 4.930 4.970 0  0 0 0 0  0 
2009.11.27 5.000 4.940 0  0 0 0 0  0 
2009.11.30 4.865 4.860 0  0 0 0 0  0 
2009.12.1 4.830 3.855 0  0 0 1 0  0 
2009.12.2 4.890 4.890 0  0 0 0 0  0 
2009.12.3 4.850 4.710 0  0 0 0 0  0 
2009.12.4 4.780 4.760 0  0 0 0 0  0 
2009.12.7 3.225 3.565 0  0 0 1 0  0 
2009.12.8 3.600 3.705 0  0 0 0 0  0 
2009.12.9 3.760 3.575 0  0 0 0 0  0 
2009.12.10 3.575 3.790 0  0 0 0 0  0 
2009.12.11 3.840 3.840 0  0 0 0 0  0 
2009.12.14 3.850 3.810 0  0 0 0 0  0 
2009.12.15 3.840 3.985 0  0 0 0 0  0 
2009.12.16 3.985 4.100 0  0 0 0 0  0 
2009.12.17 4.105 4.165 0  0 0 0 0  0 
2009.12.18 4.220 4.150 0  0 0 0 0  0 
2009.12.21 4.145 4.500 0  0 0 0 0  0 
2009.12.22 4.550 4.760 0  0 0 0 0  0 
2009.12.23 4.705 4.720 0  0 0 0 0  0 
2009.12.24 4.900 4.780 0  0 0 0 0  0 

私のコードは

buying_list = data[data['Buying']==True] 
data['Cut_Off_Signal']=False 
def trading(data): 
     for idd in range(len(data.index)): 
      for ids in range(len(buying_list.index)): 
       if data.index[idd]>buying_list.index[ids]: 
        data['Cut_Off_Signal'][idd] = np.where(buying_list['Cut_Off_Price'][ids]>data['Close'][idd],True,False) 
        data[buying_list.index[ids],'Sell_Out_Signal'] = np.where(data['Cut_Off_Signal'][idd]== True,True,False) 
        #data.loc[buying_list.index[ids],'Sell_Out_Signal']=True 
       else: 
        continue 

を、以下の通りですと、私が必要なものを動作していないされ、それはあまりにも多くの時間を要しました。 (合計行あり970、および総buying_list行は37ですが、それは5分の周りにかかりました。 私は(私は初心者です^^ ;;) を私はあなたのアドバイスに感謝!

答えて

0
(F).applyに失敗しました

あなたのためのデータの上にパンダの内部がループしてみましょう、とだけフィルタの適切なチェーンを提供することに焦点を当て、私は下記のファイルdata.txtを持っていると仮定します。

Date,Open,Close,Buying,Selling,Cut_Off_Price 
2009.11.11,4.805,4.43,0,0,0 
2009.11.12,4.51,4.505,0,0,0 
2009.11.13,4.545,4.765,1,0,5.812 
2009.11.16,4.78,4.76,0,0,0 
2009.11.17,4.755,4.605,0,0,0 
2009.11.18,4.56,4.495,0,0,0 
2009.11.19,4.495,4.535,1,0,3.628 
2009.11.20,4.535,4.63,0,0,0 
2009.11.23,4.7,4.67,0,0,0 
2009.11.24,4.74,4.91,0,0,0 

を私は見つけるために、次のコードを使用することができますを持つデータの行セットを1に設定し、を閉じるは、Cut_Off_Priceより大きい。

  Date Open Close Buying Selling Cut_Off_Price 
6 2009.11.19 4.495 4.535  1  0   3.628 

import pandas as pd 

df = pd.read_csv('data.txt') 
buy_signal = df[df.Buying & (df.Cut_Off_Price != 0) & 
       (df.Close > df.Cut_Off_Price)] 
print(buy_signal) 

結果、あなたが列を作成したい場合は、まずあなたのフィルタを組み合わせたマスクを作成し、列を追加することができます。

  Date Open Close Buying Selling Cut_Off_Price Signal_Buy 
0 2009.11.11 4.805 4.430  0  0   0.000   0 
1 2009.11.12 4.510 4.505  0  0   0.000   0 
2 2009.11.13 4.545 4.765  1  0   5.812   0 
3 2009.11.16 4.780 4.760  0  0   0.000   0 
4 2009.11.17 4.755 4.605  0  0   0.000   0 
5 2009.11.18 4.560 4.495  0  0   0.000   0 
6 2009.11.19 4.495 4.535  1  0   3.628   1 
7 2009.11.20 4.535 4.630  0  0   0.000   0 
8 2009.11.23 4.700 4.670  0  0   0.000   0 
9 2009.11.24 4.740 4.910  0  0   0.000   0 

buy_mask = df.Buying & (df.Cut_Off_Price != 0) & (df.Close > df.Cut_Off_Price) 
df['Signal_Buy'] = buy_mask + 0 #add 0 to convert from bool to int 
print(df) 

結果

関連する問題