概述
我正在建立一个测试我的投资策略盈利能力的功能。战略很简单;如果股票当天收盘,我会在第二天下注,如果收盘当天,我会在第二天下注。这基本上是一种逆向策略。
方法
我正在使用np.where(numpy)函数来确定天气与否,这是一个成败的交易。如果股票今天收盘然后第二天上涨,那么它就是“胜利”,或者如果它下跌了#34;亏损"。如果它今天上升然后明天下来" Win"如果它今天上升然后第二天上升"损失"
代码
df = pd.DataFrame({'Day':['Mon','Tues','Wed','Thurs','Fri','Mon','Tues','Wed','Thurs','Fri','Mon','Tues','Wed','Thurs','Fri'],
'DaysGainOrLoss':[0.02,-0.05,0.01,0.02,-0.01,-0.03,0.03,-0.01,0.01,0.03,-0.03,-0.05,-0.01,0.03,0.02]})
df['NextDaysGainOrLoss'] = df['DaysGainOrLoss'].shift(-1)
df['WinOrLoss'] = np.where(df.NextDaysGainOrLoss > 0,np.where(df.DaysGainOrLoss <=0, "Win","Loss"),np.where(df.DaysGainOrLoss > 0,"Win","Loss"))
print(df)
输出
Day DaysGainOrLoss NextDaysGainOrLoss WinOrLoss
0 Mon 0.02 -0.05 Win
1 Tues -0.05 0.01 Win
2 Wed 0.01 0.02 Loss
3 Thurs 0.02 -0.01 Win
4 Fri -0.01 -0.03 Loss
5 Mon -0.03 0.03 Win
6 Tues 0.03 -0.01 Win
7 Wed -0.01 0.01 Win
8 Thurs 0.01 0.03 Loss
9 Fri 0.03 -0.03 Win
10 Mon -0.03 -0.05 Loss
11 Tues -0.05 -0.01 Loss
12 Wed -0.01 0.03 Loss
13 Thurs 0.03 0.02 Loss
14 Fri 0.02 NaN Win
问题
此代码适用于二元结果,无论是赢还是亏。如果我添加一个更复杂的标准,问题就变成了,即现在我只想交换它,DaysGainOrLoss是&gt; = .05或&lt; = -.05。现在,我不需要输赢,而是在不符合标准的情况下,我需要出现NoTrade。 np.where在二进制结果方面表现不错,但现在这已经变得复杂了。我知道必须有一个更好的方法来管理这个,但我不确定它是什么。
期望
Day DaysGainOrLoss NextDaysGainOrLoss WinOrLoss
0 Mon 0.02 -0.05 NoTrade
1 Tues -0.05 0.01 Win
2 Wed 0.01 0.02 NoTrade
3 Thurs 0.02 -0.01 NoTrade
4 Fri -0.01 -0.03 NoTrade
5 Mon -0.03 0.03 NoTrade
6 Tues 0.03 -0.01 NoTrade
7 Wed -0.01 0.01 NoTrade
8 Thurs 0.01 0.03 NoTrade
9 Fri 0.03 -0.03 NoTrade
10 Mon -0.03 -0.05 NoTrade
11 Tues -0.05 -0.01 Loss
12 Wed -0.01 0.03 NoTrade
13 Thurs 0.03 0.02 NoTrade
14 Fri 0.02 NaN NoTrade
答案 0 :(得分:1)
您可以使用apply
应用任意变换:
def myfunc(x):
if x > 0.5:
return 'Win'
if x < 0:
return 'Loss'
return 'No Trade'
df['action'] = df[0].apply(myfunc)
print(df)
0 action
2011-01-01 00:00:00 -0.324398 Loss
2011-01-01 01:00:00 -0.761585 Loss
2011-01-01 02:00:00 0.057204 No Trade
2011-01-01 03:00:00 -1.162510 Loss
2011-01-01 04:00:00 -0.680896 Loss
2011-01-01 05:00:00 -0.701835 Loss
2011-01-01 06:00:00 -0.431338 Loss
2011-01-01 07:00:00 0.306935 No Trade
2011-01-01 08:00:00 -0.503177 Loss
2011-01-01 09:00:00 -0.507444 Loss
2011-01-01 10:00:00 0.230590 No Trade
2011-01-01 11:00:00 -2.326702 Loss
2011-01-01 12:00:00 -0.034664 Loss
2011-01-01 13:00:00 0.224373 No Trade
2011-01-01 14:00:00 -0.242884 Loss
2011-01-01 15:00:00 -0.134757 Loss
2011-01-01 16:00:00 -1.177362 Loss
2011-01-01 17:00:00 0.931335 Win
你可以使myfunc
任意复杂。