2017-10-19 11 views
1

次のコードを書く簡単な方法はありますか?現在のところ、コードは実行に永遠にかかっています。これは奇妙です。何かが間違っています...目的が複雑すぎるようです。私も言うSettingWithCopyWarning予告取得:基本的なpython:以前のアイテムに基づいてリストの次のアイテムを作成するにはどうすればいいですか?

値がデータフレーム

目的からスライスのコピーに設定されるようにしようとしていることである:私は4時系列/列を持っている - a, b, c and dここで、dは入力する必要のある出力列です。

  1. aabcの間にある場合、戻り次いで、ac下回る場合
  2. 、カラムdに0を返し、その後、カラムd 1、
  3. を返し、その後、bより大きい場合前の項目は列dです。

この最後のifステートメントは、列dの前の項目を参照していることに注意してください。

data['d']=1 
data['previous_d']=1 

for i in range (len(data.a)): 
    data.previous_d.iloc[i]=data.d.iloc[i-1] 
    data.stance.iloc[i] = np.where((data.a.iloc[i]> data.b.iloc[i]),1,np.where((data.a.iloc[i]< data.c.iloc[i]),0,data.previous_d.iloc[i])) 
+0

コードが動作すれば、すべての問題はありません。コードリファクタリングを行う必要はありません – Rockbar

+0

@Rockbarなぜですか?しかし、質問はhttps://codereview.stackexchange.com/で尋ねる必要があります。 –

+0

'a> bとa

答えて

0

ただ、いくつかのブールインデックスが

data.loc[data.a> data.b,'d'] = 1 
data.loc[data.a < data.c,'d'] = 0 
data.loc[(data.a < data.b) & (data.a > data.c),'d'] = data.d.shift(1) 

または第三の条件は

data.d.fillna(method='ffill',inplace=True) 

の代わりを使用し、充填されていない番号の間すべてのものが最後に人口値から充填されることを意味している場合に動作します最後の行

+0

ありがとう!魅力のように働く – helloworldlevel

関連する問題