我想在数据框架中创建一个列,其中股票价格取决于另一个计算的布尔值。
close high low
Index
0 10 11 10
1 11 12 10
2 10 11 9
首先,我想定义一些逻辑上看起来像这样的条件,但实际上是一个很长的条件:
condition1: if df.close > df.close.shift() return True
实际上我想要定义更多条件,这些条件都是真或假的。然后我将它包含在np.where():
中 df['NewColumn'] = np.where(condition1() == True, 'A', 'B')
我尝试将条件定义为函数,但无法正确设置它。我想避免将条件的内容直接写入np.where(),因为它会因几个嵌套条件而变得过于复杂。
那么,我怎样才能最有效地完成任务呢?
编辑:一个函数看起来像这样(但它在上面的np.where()中不起作用):
def condition1():
if df.Close > df.Close.shift(1):
return True
Else
return False
答案 0 :(得分:1)
更新: 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
那样更容易,更好