我正在寻找一种很好的通用方法来获得每个sharpe值最高的2种策略。
DataFrame (代码):
df = pd.DataFrame({
'ccyPair': ['EURUSD', 'EURUSD', 'EURUSD', 'USDJPY', 'USDJPY', 'USDJPY'],
'stype': ['SMA', 'Channel', 'Vol', 'SMA', 'Channel', 'Vol'],
'sharpe': [0.1, 0.2, 0.3, 0.4, 0.5, 0.6]
})DataFrame (表视图):
ccyPair stype sharpe
0 EURUSD SMA 0.1
1 EURUSD Channel 0.2
2 EURUSD Vol 0.3
3 USDJPY SMA 0.4
4 USDJPY Channel 0.5
5 USDJPY Vol 0.6预期结果有2个欧元兑美元和2个美元兑日元战略,具有最佳夏普值:
ccyPair stype sharpe
0 EURUSD Channel 0.2
1 EURUSD Vol 0.3
2 USDJPY Channel 0.5
3 USDJPY Vol 0.6发布于 2020-07-09 06:07:49
对最后一个底部值使用DataFrame.sort_values和GroupBy.tail:
df = df.sort_values(['ccyPair','sharpe']).groupby('ccyPair').tail(2)
print (df)
ccyPair stype sharpe
1 EURUSD Channel 0.2
2 EURUSD Vol 0.3
4 USDJPY Channel 0.5
5 USDJPY Vol 0.6编辑@ is 95-如果使用的是head值的顺序不同;)
df = df.sort_values(['ccyPair','sharpe'], ascending=False).groupby('ccyPair').head(2)
print (df)
ccyPair stype sharpe
5 USDJPY Vol 0.6
4 USDJPY Channel 0.5
2 EURUSD Vol 0.3
1 EURUSD Channel 0.2df = df.sort_values(['ccyPair','sharpe'], ascending=[True, False]).groupby('ccyPair').head(2)
print (df)
ccyPair stype sharpe
2 EURUSD Vol 0.3
1 EURUSD Channel 0.2
5 USDJPY Vol 0.6
4 USDJPY Channel 0.5https://stackoverflow.com/questions/62808471
复制相似问题