2016-10-20 1 views
-1

別の計算からのブール値を条件とする株価を持つデータフレームに列を作成したいとします。私はすべてがTrue届けることが、より多くの条件を定義したいと実物でnp.where()または新しいpandasデータフレーム列の別の論理的な方法

condition1: if df.close > df.close.shift() return True 

:論理的にそのように見えるが、実際に長くいる可能性が

   close high low 
    Index 
     0  10  11  10 
     1  11  12  10 
     2  10  11  9 

まずI(s)は、いくつかの条件を定義したいですまたはFalse。

df['NewColumn'] = np.where(condition1() == True, 'A', 'B') 

は、私が関数としての条件を定義しようとしましたが、それを正しく設定するために管理していませんでした。それから私はnp.where()にすることを含んでいます。条件の内容をnp.where()に直接書き込まないようにしたいのですが、これは複数のネストされた条件では複雑すぎるためです。

どうすれば私の仕事を最も効率的に行うことができますか?

編集:関数は次のようになります(ただし、上記)(np.whereでは動作しません):

def condition1(): 
    if df.Close > df.Close.shift(1): 
     return True 
    Else 
     return False 
+0

'numpy.where(df.close> df.close.shift()のように直接それを行うことを容​​易にし、よりよいだろう、 ':しかし、あなたは、このようにそれを行うことができますA '、' B ') 'はうまくいくはずです –

+1

共有してください***あなたは関数として定義しようとしたが、正しく設定していない状態***? – Abdou

+0

@Paul H、私は実際の条件の複雑さと数のために式に直接条件を書くのを避けたいと思います。 –

答えて

1

UPDATE: IMOあなたは関数として "条件" を必要としません:

In [89]: cond1 = df.Close > df.Close.shift(1) 

In [90]: cond2 = df.High < 12 

In [91]: df['New_Close'] = np.where(cond1, 'A', 'B') 

In [92]: df 
Out[92]: 
    Close High Low New_Close 
0  10 11 10   B 
1  11 12 10   A 
2  10 11 9   B 

In [93]: df['New_High'] = np.where(cond1, '<12', '>=12') 

In [94]: df 
Out[94]: 
    Close High Low New_Close New_High 
0  10 11 10   B  >=12 
1  11 12 10   A  <12 
2  10 11 9   B  >=12 

OLD答え:私は本当にこのアプローチのいずれかの利点(利益を)見ない

def condition1(): 
    return (df.Close > df.Close.shift(1)) 

def condition2(): 
    return (df.High < 12) 


In [72]: df['New_Close'] = np.where(condition1(), 'A', 'B') 

In [73]: df 
Out[73]: 
    Close High Low New_Close 
0  10 11 10   B 
1  11 12 10   A 
2  10 11 9   B 

In [74]: df['New_High'] = np.where(condition2(), '<12', '>=12') 

In [75]: df 
Out[75]: 
    Close High Low New_Close New_High 
0  10 11 10   B  <12 
1  11 12 10   A  >=12 
2  10 11 9   B  <12 

PS IMO @PaulH said in his comment

+0

ありがとう、これは動作するようです。利益は主に光学的性質である。 np.where()が長くなり、ネストされたときの可読性を向上させる必要があります。 –

関連する問題