首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从熊猫DataFrame的每一组中选择值最高的N行

如何从熊猫DataFrame的每一组中选择值最高的N行
EN

Stack Overflow用户
提问于 2020-07-09 06:05:59
回答 1查看 1.1K关注 0票数 1

我正在寻找一种很好的通用方法来获得每个sharpe值最高的2种策略。

DataFrame (代码):

代码语言:javascript
复制
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 (表视图):

代码语言:javascript
复制
   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个美元兑日元战略,具有最佳夏普值:

代码语言:javascript
复制
   ccyPair    stype  sharpe
 0  EURUSD  Channel     0.2
 1  EURUSD      Vol     0.3
 2  USDJPY  Channel     0.5
 3  USDJPY      Vol     0.6
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-09 06:07:49

对最后一个底部值使用DataFrame.sort_valuesGroupBy.tail

代码语言:javascript
复制
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值的顺序不同;)

代码语言:javascript
复制
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.2

代码语言:javascript
复制
df = 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.5
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62808471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档